मान लीजिए मैं इस जैसे एक वर्ग है:एक curried proc example_eval संभव है?
class Test
def test_func
140
end
end
और एक proc, 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
को भेजना चाहते हैं, और हमेशा 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 क्या गलत बाध्यकारी हो रहा है में चलता है। क्या देता है?
अच्छी तरह से ऐसा लगता है कि फ़ंक्शन को घुमाने में यह 'test_func' चर को बाध्य करता है जो स्थानीय' test_func' है। मैं यह सोचने की कोशिश कर रहा हूं कि यह क्यों होना चाहिए और कुछ भी नहीं आ सकता है, यहां तक कि चारों ओर खेलना मुझे अपेक्षित परिणाम प्राप्त करने का कोई तरीका नहीं मिल सकता है (एक घुमावदार प्रो पर सही ढंग से बाध्य 'test_func')। अच्छा प्रश्न। –
हाँ यह एक दिलचस्प है। ऐसा लगता है कि प्रो को घुमाने के बाद यह मुख्य रूप से दायरे को बांधता है और परीक्षण के भीतर इसे मूल्यांकन करने के बावजूद यह मुख्य रूप से स्कॉइंग को बनाए रखता है। – jvans
मैंने इसे एक बग के रूप में बताया [यहां] (https: //bugs.ruby-lang।संगठन/मुद्दे/10006), हम देखेंगे कि वास्तव में यह है या यदि कोई वहां समझा सकता है। –