在下面的情况中,循环会在回答"yes"
或"no"
后退出。
def ask question
while true
puts question
answer = gets.chomp.downcase
if answer == "yes"
return true
elsif answer == "no"
return false
end
puts "Please answer \"yes\" or \"no\"."
end
end
ask('hello')
当删除布尔值旁边的return
语句时,在控制台中打印最后puts
(please answer ...
),然后再次执行循环。
当返回任何内容(显式或隐式)或定义了中断时,循环应该中断,对吗?在这种情况下有明确的回报时有什么不同?
答案 0 :(得分:2)
当出现以下任何一种情况时,方法结束
raise
/ throw
时立即 - 除非这样处理return
时立即 立即表单立即结束方法(毫不奇怪),而简单的纯表达式(如true
或false
)自己出现在一行上(读取:表达式) ,除非这些值本身已被使用 - 但这并没有完成,否则将删除返回。
答案 1 :(得分:1)
让我们看一下简化代码是否可以提供更清晰的图片:
if answer == "yes"
return true
elsif answer == "no"
return false
end
puts "something"
是这里最相关的部分。使用显式return
,代码退出方法,永远不会到达puts
。因此,返回值为true
或false
。
没有明确的return
:
if answer == "yes"
true
elsif answer == "no"
false
end
puts "something"
true
和false
语句只退出if-else
代码并执行puts
,其返回值为nil
。
答案 2 :(得分:0)
显式返回将从ENTIRE方法返回,如果循环是有限的或无限的并不重要,如果它在方法中,则返回将在那里停止并返回。是的,你是对的,循环也应该从循环中断开。您还可以指定break的参数,该参数将是整个循环的返回值。