gpt4 book ai didi

ruby - “Next”关键字在特定 Ruby 代码中被误解

转载 作者:太空宇宙 更新时间:2023-11-03 17:04:40 24 4
gpt4 key购买 nike

我做了一个小程序来计算数组中的单词数:

array = ["first line",
"second line",
"",
" fourth line containing a few more words ",
"fifth line "]

words = 0

array.each do |s|
wis = 0
s.length.times do |i|
if i == 0
if s[i] != " "
wis = 1
next #HERE IT COMES.
end
end
if s[i] != " " and s[i-1] == " "
wis += 1
end

end
words += wis
end

puts "Words in the array: #{words}"

输出:

Words in the array: 13

它工作正常,但有一件事我无法理解。我知道 next 关键字离开当前迭代,但我不知道它在这里是如何工作的。如果我从代码中省略它,输出将是 Words in the array: 14。我知道 next 可以替换为 else 条件,这就是问题所在 - 我不知道如何定义它。

  • 能否请您解释一下 next 在代码中的工作原理?

  • 你能给我一个不使用 next 关键字的 if 条件的替代解决方案吗?

谢谢

最佳答案

正如其他人所说,用 Ruby 编写字数统计有很多更优雅的方法。不过,我会尝试回答您的具体问题,因为这里还有一些东西需要学习。

正如您所提到的,next 离开当前迭代。在您的示例中,这意味着当 i == 0 条件和 s[i] != "" 条件都为真时,则 next 将执行,if s[i] != ""and s[i-1] == ""... 部分将被跳过该迭代。

当您删除 next 时得到 14 个单词的计数的原因依赖于知道当负索引用于字符串时会发生什么。在这一行中:

if s[i] != " " and s[i-1] == " "

i 为 0 时,这等同于

s[0] != " " and s[-1] == " "

s[-1] 表示字符串的最后一个字符"fifth line " 行也是如此,因此结果是该行的第一个单词被计数了两次。

要将 next 替换为 else 条件,您需要为 if s[i] != ""和 s 安排替代方法[i-1] == ""... 如果 i == 0 和 s[i] != "" 则不执行,例如:

if i == 0 and s[i] != " "
wis = 1
elsif s[i] != " " and s[i-1] == " "
wis += 1
end

关于ruby - “Next”关键字在特定 Ruby 代码中被误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40706567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com