【发布时间】:2013-10-08 06:56:37
【问题描述】:
我想知道是否可以将块传递给 Proc。简单地将块传递给Proc.call 是行不通的:
foo = Proc.new {
yield
}
foo.call {
puts "test"
}
结果:
LocalJumpError: 没有给出块(产量)
lambda 也是如此。然而,这确实适用于方法对象:
class Foo
def bar
yield
end
end
bar = Foo.new.method :bar
bar.call { puts "Success!" }
结果:
成功了!
奇怪的是,在将方法对象转换为 proc 之后,它仍然有效:
bar.to_proc.call { puts "Success!" }
结果:
成功了!
那么,为什么由块组成的 Proc 不接受块,而原本是方法的 Proc 却可以呢?是否可以从接受块的块创建 Procs?
【问题讨论】:
-
对我来说仍然是一个悬而未决的相关问题:可以从产生的块创建产生产生的方法吗?
标签: ruby