运行 文件中的 s 表达式

Running s-expressions from File

我在文件中有一个 sexp,我想读入然后 运行 它在 ruby 中。每当我尝试 运行 它时,它都会告诉我 SexpTypeError,

exp must be a Sexp, was String:

有没有办法从文件中 运行 Sexp

我正在使用 ruby2ruby gemruby_parser gem。

我试过 Windows 10,ruby 2.6。我在阅读后尝试解析它,但它复制了我在文件中的 s 表达式,但它不起作用。

    ruby      = "def a\n  puts 'A'\nend\n\ndef b\n  a\nend\na"
    parser    = RubyParser.new
    ruby2ruby = Ruby2Ruby.new
    sexp      = parser.process(ruby)
    from_file =nil

    File.open('jkl', 'wb')do |file|
        file.write(sexp)
    end
    File.open('jkl', 'rb') do |fp|
       from_file = fp.read()
    end
    eval ruby2ruby.process(from_file) 

我希望代码 运行 给出输出 "A"

你必须将字符串转换成 sexp 回来。例如instance_eval 可以。

require 'ruby_parser'
require 'ruby2ruby'

ruby = "def a\n  puts 'A'\nend\n\ndef b\n  a\nend\na"
parser = RubyParser.new
ruby2ruby = Ruby2Ruby.new
sexp = parser.process(ruby)

File.open('jkl', 'wb') { |file| file.write(sexp) }
from_file = File.open('jkl', 'rb', &:read)

#                      ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓    
eval ruby2ruby.process(instance_eval(from_file))

b()
#⇒ A