【发布时间】:2019-08-27 01:47:47
【问题描述】:
我认为在使用 Ruby 时,表达式的最后一行会隐式返回,而不必使用“return”关键字。但是,在下面的代码中,只有使用 return 关键字时才会返回正确的值。
def find_the_cheese(ings)
cheese_types = ["cheddar", "gouda", "camembert"]
i = 0
while i < ings.length do
if cheese_types.include?(ings[i])
ings[i] #=> only works if 'return' keyword is in front of it
end
i += 1
end
nil
end
find_the_cheese(["water", "gouda", "crackers"])
第 5 行的 if 语句应该计算为真,因此它应该返回 ings[i] 的值,即“gouda”。但是,如果我不在值前面写“return”,那么整个事情的计算结果为 nil。但如果我写“return”,那么它给出了正确的答案。 在其他时候使用 ruby 时,我忽略了 return 关键字,它返回了我期望的值,那么为什么有时它会起作用而有时却不起作用呢?
【问题讨论】:
-
“我认为在使用 Ruby 时,表达式的 最后一行 会被隐式返回” – 提示 #1:方法的最后一行是什么? “第 5 行 上的 if 语句”——提示 #2:第 5 行是最后一行吗?
-
在 Ruby 中,您很少需要使用索引、显式计数器变量和低级循环来遍历数组。鉴于 Ruby 丰富的
Enumerable模块,几乎总有一种更简洁的方式。例如,您的上面的代码可以重写为:ings.find { |ing| cheese_types.include?(ing) }——它可以在没有明确的return的情况下工作。