我希望能够在Ruby代码中编写一个lambda/Proc,序列化它,这样我就可以将它写到磁盘上,然后再执行lambda。有点像..。
x = 40
f = lambda { |y| x + y }
save_for_later(f)
稍后,在Ruby解释器的单独运行中,我希望能够说...
f = load_from_before
z = f.call(2)
z.should == 42
Marshal.dump不适用于Procs。我知道Perl有Data::Dump::Streamer,在Lisp语言中这是微不足道的。但是有没有办法在Ruby中做到这一点呢?换句话说,save_for_later
的实现是什么?
编辑:My answer below很好,但它不会关闭自由变量(如x
)并将它们与一起序列化。所以在我的例子中。
x = 40
s = save_for_later { |y| x + y }
# => "lambda { |y|\n (x + y)\n}"
..。字符串输出不包括x
的定义。有没有一种解决方案可以考虑到这一点,可能是通过序列化符号表?你能在Ruby中访问它吗?
编辑2:我更新了我的答案,加入了序列化局部变量。这似乎是可以接受的。
https://stackoverflow.com/questions/199603
复制相似问题