显式与隐性回归

时间:2014-10-04 01:18:10

标签: ruby

在下面的情况中,循环会在回答"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语句时,在控制台中打印最后putsplease answer ...),然后再次执行循环。

当返回任何内容(显式或隐式)或定义了中断时,循环应该中断,对吗?在这种情况下有明确的回报时有什么不同?

3 个答案:

答案 0 :(得分:2)

当出现以下任何一种情况时,方法结束

  • 线程终止时立即
  • 当遇到raise / throw时立即 - 除非这样处理
  • 遇到return时立即
  • 当代码用完或"到达结尾时#34;,在这种情况下返回最后一个表达式的值

立即表单立即结束方法(毫不奇怪),而简单的纯表达式(如truefalse)自己出现在一行上(读取:表达式) ,除非这些值本身已被使用 - 但这并没有完成,否则将删除返回。

答案 1 :(得分:1)

让我们看一下简化代码是否可以提供更清晰的图片:

if answer == "yes"
  return true
elsif answer == "no"
  return false
end
puts "something"

是这里最相关的部分。使用显式return,代码退出方法,永远不会到达puts。因此,返回值为truefalse

没有明确的return

if answer == "yes"
  true
elsif answer == "no"
  false
end
puts "something"

truefalse语句只退出if-else代码并执行puts,其返回值为nil

答案 2 :(得分:0)

显式返回将从ENTIRE方法返回,如果循环是有限的或无限的并不重要,如果它在方法中,则返回将在那里停止并返回。是的,你是对的,循环也应该从循环中断开。您还可以指定break的参数,该参数将是整个循环的返回值。