我希望能够解析一些参数没有被字符串包围的 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]
有没有人对这类问题有一个干净的解决方案。我想避免对字符串进行标记,因为与词法分析相比,通过调用方法读取数据需要最少的工作。但如果我想做一些不可能的事情,我想知道。谢谢。