require 'ruby2ruby'
require 'parsetree'
code = "puts(var)"
sexp = SexpProcessor.new.process(ParseTree.translate(code))
# => s(:fcall, :puts, s(:array, s(:vcall, :var)))
code = Ruby2Ruby.new.process(sexp)
# => UnknownNodeError: Bug! Unknown node-type :fcall to Ruby2Ruby
是否有某种方法可以将Sexps从ParseTree转换回ruby代码?
我开始编写一些可以进行此翻译的代码,但我想知道它是否已经存在。另一个问题是Ruby2Ruby在算术运算中放了很多不需要的括号(比如4+3-2+-2**4
到(((4 + 3) - 2) + -(2 ** 4))
,两者都是等效的)。有没有办法删除它们?
答案 0 :(得分:2)
我不确定这是否适合您,因为您似乎想要从字符串中解析ruby代码,但如果您确实需要运行代码的源代码,则可以执行以下操作:
$ irb
?> require 'rubygems'
=> true
?> require 'parse_tree'
=> true
?> require 'parse_tree_extensions'
=> true
?> require 'ruby2ruby'
=> true
?> def calc; 4+3-2+-2**4; end
=> nil
?> puts method(:calc).to_ruby
def calc
(((4 + 3) - 2) + -(2 ** 4))
end
虽然这确实增加了你不想要的间距。
答案 1 :(得分:1)
我认为它们应该是兼容的,因为它们是by the same person编写的,但有时会出现漏洞(如this question中所见,同一作者的两个宝石之间存在不兼容性)。