Ruby 关于《元编程》中 block 作为参数的问题

adventurelw · 2012年07月27日 · 最后由 adventurelw 回复于 2012年07月27日 · 3539 次阅读

元编程这本书 3.7 小节中,使用块作为块的参数并且将其作为 Proc 对象使用。 Kernel.send :define_method, :event do |name, &block| events[name] = block end 但这显然行不通,会出现“stack level too deep (SystemStackError)”的错误,如果是运行块倒好办,直接用 yield 就行了。只是这里要用作对象,怎么弄呢? 盼指教!

Kernel.send :define_method,:foo ,&Proc.new{|bar| bar * 2} 块!=Proc

#1 楼 @jjym 对啊,块!=Proc,才导致需要在参数前加&符号。 但现在是需要用块作为 block 的参数,do |name, &block|里 block 是一个块参数,通过&符号将其转变成是一个 Proc 对象,只是语言不允许这么做,两根竖线中间的参数不能加&,我想了解一下看过《元编程》的牛人是怎么解决这个问题的?

#2 楼 @adventurelw 看错了,不过我试了下没这错误。 只是语言不允许这么做,两根竖线中间的参数不能加& 为什么这么说?不要武断的得出结论啊

#3 楼 @jjym 咦,那真是奇怪,我是在 1.9.3p194 下,请问的你环境是? 我肯定是运行了有错误才来问的。

示例代码没有问题。

#5 楼 @zw963 请问运行环境是? 我在 1.9.3p194 下就出现了这个问题啊。。。。

嗯,重新测试了一下,应该是我哪里有点搞错了,语法是没有问题的,多谢。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号