Ruby块使用method_missing
|
请注意,这是对我的问题的跟进。
我正在尝试解析以下Tcl代码:
foo bar {
biz buzz
}
在Tcl中,foo
是方法名称,bar
是参数,其余的是要由eval
处理的\“ block \”。
现在这是我当前的实现:
def self.foo(name, &block)
puts \"Foo --> #{name}\"
if block
puts \"block exists\"
else
puts \"block does not exist\"
end
end
def self.method_missing(meth, *args, &block)
p meth
p block
meth.to_s &block
end
tcl = <<-TCL.gsub(/^\\s+/, \"\").chop
foo bar {
biz buzz
}
TCL
instance_eval(tcl)
输出以下内容:
:bar
#<Proc:0x9e39c80@(eval):1>
Foo --> bar
block does not exist
在此示例中,当将该块传递给“ 1”方法时,该块不存在。但是在“ 7”中它确实存在(至少它似乎存在)。这里发生了什么?
请注意,我知道ruby的括号优先级,并意识到这项工作:
foo (bar) {
biz buzz
}
但是,我想省略括号。那么在红宝石中(没有词法分析)这可能吗?
没有找到相关结果
已邀请:
3 个回复
杰黔轿缺
这样,块将存在。
锹缄
方法,并且所有结果都将作为单个参数传递给
方法。 您可以通过简化方法调用来自己尝试(所有元编程都掩盖了您所遇到的实际问题):
呢率篓舍烫
。