为什么退出循环需要返回关键字?

时间:2017-09-02 16:35:38

标签: ruby

在下面的test2方法中,为什么方法返回不等于return时,为什么需要nil关键字?

test中,return不是必需的。程序评估的最后一行(truefalse)成为返回

def test
  x = gets.chomp

  if x == 'yes'
    true
  else
    false
  end
end

result = test
puts result # PRINTS 'TRUE' OR 'FALSE'

但在test2中,如果未在指定的行中指定return,则该方法的返回值为nil

def test2
  while true
    reply = gets.chomp.downcase

    if (reply == 'yes' || reply == 'no')
      if reply == 'yes'
        true      # RETURN NEEDED HERE
       else
        false     # RETURN NEEDED HERE
       end
      break

     else
      puts 'Please answer "yes" or "no".'
    end
  end
end

result2 = test2
puts result2        # PRINTS NIL

这些例子改编自Chris Pine的“如何编程”,其中说明返回键是必要的,以便退出循环。但是,如果要评估的最后一行仍然是truefalse,为什么要返回一个值?

2 个答案:

答案 0 :(得分:3)

如果您不使用return,则方法中的最后一个语句是while循环本身,其值为nil。当你摆脱循环时,你的循环中if的结果不会被“结束”

答案 1 :(得分:1)

您可以使用breakwhile提供返回值:

if reply == 'yes'
  break true
 else
  break false
end