
程式的意義
|
55
這裡我們正使用字串連接來組合子運算式指示之外的運算式指示,我們知道 proc 的
Ruby 原始碼會指示每個子運算式,因此可以使用它們當作更大一段的 Ruby 原始碼,以
提供的環境來呼叫那些 proc,並以它們的傳回值來執行一些運算。以下是指示的結果:
>> Add.new(Variable.new(:x), Number.new(1)).to_ruby
=> "-> e { (-> e { e[:x] }).call(e) + (-> e { 1 }).call(e) }"
>> LessThan.new(Add.new(Variable.new(:x), Number.new(1)), Number.new(3)).to_ruby
=> "-> e { (-> e { (-> e { e[:x] }).call(e) + (-> e { 1 }).call(e) }).call(e) <
(-> e { 3 }).call(e) } "
這些指示現在已經夠複雜了,不論它們所執行的正不正確,都難以觀察。但我們還是要
試試它們的正確性:
>> environment = { x: 3 }
=> {:x=>3}
>> proc = eval(Add.new(Variable.new(:x), Number.new(1)).to_ruby)
=> #<Proc (lambda)>
>> proc.call(environment)
=> 4
>> proc = eval(
LessThan.new(Add.new(Variable.new(:x), ...