引数が文字列で囲まれていないTclコードを解析できるようにしたいと思います。
このtclコードを検討してください。
proc foo {name} {
puts "Foo --> $name"
}
foo bar
Tclに慣れていない場合foo
は、はメソッド名でbar
あり、は引数です(Tclでは引用符はオプションです)。
前のコードは次のように出力します。
Foo --> bar
rubyを使用してまったく同じ入力を解析することは可能ですか(bar
引用符で囲まれていないままです)?
同等のルビーコードは次のとおりです。
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]
誰かがこのタイプの問題に対するクリーンな解決策を持っていますか?メソッドを呼び出してデータを読み込むのに必要な作業は字句解析に比べて最小限であるため、文字列のトークン化は避けたいと思います。しかし、私が不可能なことをしようとしているのなら、私は知りたいのです。ありがとう。