IRB中控制结构和块内部的显式“返回”给出“意外返回”

时间:2012-11-11 20:16:14

标签: ruby irb

关于以下代码:

if a == 1
  return "a is one"
end

当我在IRB中执行它时,它给了我

  

LocalJumpError:意外return

但是当我在Rails应用程序中放入相同的代码时,它运行完美。

我是否真的必须避免从内部块中返回显式值?为什么Rails应用程序没有问题?

2 个答案:

答案 0 :(得分:5)

当您在控制台中独立运行此代码时,无法返回范围。只要将其放入方法中,它就会按预期工作。

没有范围的示例:

irb(main):001:0> if a = 1
irb(main):002:1>   return "a is one"
irb(main):003:1> end
LocalJumpError: unexpected return
  from (irb):2
  from /Users/dougal/.rbenv/versions/1.9.3-p194/bin/irb:12:in `<main>'

范围内的方法示例:

irb(main):001:0> def run
irb(main):002:1> if a = 1
irb(main):003:2>   return "a is one"
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> puts run
a is one
=> nil

答案 1 :(得分:2)

要记住一个微妙之处:通过lambda创建的块表现得像方法一样 - 它们的内部return只是终止块本身,但是{{1}上的通用块终止相应的方法

return