我关心的Ruby编写自修改代码。 和通过自修改,我的意思是能够编写采取代码块作为输入值,并输出基于该另一码块的功能。 (我不是问基础知识,如在运行时重新定义方法。)
我可能想要做的是,例如,具有以下块,
_x_ = lambda { |a, b, c, d| b + c }
可以注意到参数a
和d
都没有用在身上的一切,所以我想一个函数如。 #strip
删除它们,
x = _x_.strip
这应该产生相同的结果写:
x = lambda { |b, c| b + c }
现在,在Lisp语言,这将是很容易的,因为Lisp代码是很容易操纵数据。 但我不知道如何处理Ruby代码。 我可以分析它如。 通过
RubyVM::InstructionSequence.disassemble( x )
但如何,在此基础,做我写一个修改块? 什么我希望做其他的例子是如。
y = lambda { A + B }
y.deconstantize
# should give block same as saying
lambda { |_A, _B| _A + _B }
到目前为止,在Ruby中,我从来没有遇到过的情况下,我不得不承认,事情是不可能的。 但是这一次,直觉告诉我,我可能会遇到的精美结构化的代码与很少代码的语法根本无力谈论(这将是Lisp的)。 请赐教。