Я хотел бы иметь возможность проанализировать некоторый код 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]
У кого-нибудь есть чистое решение для этого типапроблема.Я бы хотел избежать токенизации строк, поскольку чтение данных путем вызова метода требует минимальной работы по сравнению с лексическим анализом.Но если я пытаюсь сделать что-то, что невозможно, я бы хотел знать.Благодарю.