我想连接两个procs的主体。但与here不同的是,有一个转折点。由此产生的过程应该保留原始过程' instance_eval的 -Ability。
听起来有点令人困惑,所以这是我的用例。
我在Ruby中实现了另一种语言作为内部DSL。过度简化的实施:
class Interpreter
def self.run(&program)
Interpreter.new.instance_eval(&program)
end
def initialize
@variables = {}
end
def assign_variable(name, value)
@variables[name] = value
end
def display(name)
puts @variables[name]
end
end
Interpreter.run do
assign_variable :foo, 42
display :foo
end
如果我将proc的主体分成另外两个:
assignment = proc { assign_variable :foo, 42 }
printing = proc { display :foo }
combined = proc { assignment.call; printing.call }
Interpreter.run(&combined)
它不起作用,因为combined
proc是 instance_eval -ed,但assignment
和printing
过程在它们的位置上下文中进行评估被定义了。
我想分割原始过程的原因是我可以干我的测试。
答案 0 :(得分:1)
你可以做到
combined = proc {
instance_eval &assignment
instance_eval &printing
}
但如果有人提出更具惯用性的话,我不会感到惊讶