假設我有一類像這樣:可能對一個咖喱過程的instance_eval?
class Test
def test_func
140
end
end
而且一個進程,它引用從Test
一個成員函數:
p = ->(x, y) { x + y + test_func } # => #<Proc:[email protected](pry):6 (lambda)>
要調用p
,我把它綁定到Test
一個實例:
test = Test.new # => #<Test:0x007fb3143c5a68>
test.instance_exec(1, 2, &p) # => 143
現在假設我想通過y
到p
,始終通過x = 1
:
curried = p.curry[1] # => #<Proc:0x007fb3142be070 (lambda)>
理想我應該能夠僅僅instance_exec
像以前那樣,而是:
test.instance_exec(2, &curried)
=> NameError: undefined local variable or method `test_func' for main:Object
的PROC在什麼似乎是不正確的約束力運行。是什麼賦予了?
好吧,它似乎在currying函數中將變量'test_func'綁定爲本地'test_func'。我試圖想到爲什麼這應該是,不能拿出任何東西,也玩弄我找不到任何獲得預期結果的方式(在curried proc上正確綁定'test_func')。很好的問題。 –
是的,這是一個有趣的。它看起來像在處理完proc之後將範圍綁定到main,並且儘管在測試中對其進行了評估,但它仍然將範圍設置爲main。 – jvans
我報告這是一個錯誤[這裏](https://bugs.ruby-lang。org/issues/10006),我們會看看它是否真的存在,或者是否有人可以解釋。 –