我一直在思考如何向特定实例添加行为 Ruby中的一个类。如果我使用如下所示的instance_exec,则调用proc的方法不会一直执行。
class HasSecret
def initialize(x)
@secret = x
end
def doTheThing(&block)
puts "before block"
instance_exec(@secret, &block)
puts "after block"
end
end
foo = HasSecret.new(5)
foo.doTheThing do |x|
puts "x"
return x
end
这个例子简单地给出了:
阻止之前
5
这样做是否有任何方法?
答案 0 :(得分:1)
试试这个:
foo.doTheThing do |x|
puts x
end
通常,您不应该在块中return
。在块中调用return
将导致返回的方法产生(封闭),这通常不是所需的行为。它也可以是LocalJumpError
。
事实上,因为这种情况非常细致且不常见,很多人说你不能 return
来自一个街区。在此问题的答案评论中查看对话,例如:Unexpected Return (LocalJumpError)
在你的情况下,你没有看到“after block”put,因为传递的块中的返回导致doTheThing
在到达之前返回。