【发布时间】:2011-04-20 20:40:54
【问题描述】:
我希望能够解析一些参数不被字符串包围的 Tcl 代码。
考虑这个 tcl 代码:
proc foo {name} {
puts "Foo --> $name"
}
foo bar
对于不熟悉 Tcl 的人,foo 是方法名称,bar 是参数(引号在 Tcl 中是可选的)。
前面的代码会输出:
Foo --> bar
是否可以完全使用 ruby 解析相同的输入(bar 未加引号)?
等效的 ruby 代码是:
def foo(name)
puts "Foo --> #{name}"
end
tcl = <<-TCL.gsub(/^\s+/, "").chop
foo bar
TCL
instance_eval(tcl)
当然,当它到达bar 时会失败,因为它预计会被引用。
我尝试过修改method_missing
def method_missing(meth, *args)
puts meth.to_s + " --> args.to_s
end
但它以相反的顺序解析:
to_hash --> []
bar --> []
foo --> [nil]
有没有人对这类问题有一个干净的解决方案。我想避免对字符串进行标记,因为与词法分析相比,通过调用方法读取数据需要最少的工作。但如果我试图做一些不可能的事情,我想知道。谢谢。
【问题讨论】:
标签: ruby parsing tcl dsl method-missing