मैं सामान्य रूप से परिशोधन के साथ कार्यों को लपेटने की कोशिश कर रहा हूं ताकि उन्हें परिष्करण के बिना बुलाया जा सके। उदाहरण के लिए, ARRAY-INITIAL size value
ARRAY/INITIAL size value
के बजायएक परिष्करण के साथ एक समारोह को कैसे लपेटें ताकि परिशोधन की आवश्यकता न हो?
wrap: function [refined [path!] args [block!]] [
function args compose [
(refined) (args)
]
]
array-initial wrap 'array/initial [size value]
भी कल्पना नहीं। सामान्य रूप में काम करने के लिए लगता है, लेकिन यह कुछ अजीब है अगर आप इसे एक समारोह का उपयोग कर फोन:
>> source array-initial
array-initial: make function! [[size value][array/initial size value]]
ठीक है, तो समारोह है कि क्या हो रहा है यह है:
>> n: 0 array/initial 4 does [++ n]
== [10 11 12 13]
>> n: 10 array-initial 4 does [++ n]
== [10 10 10 10]
जब मैंने इसे source
मैं इस मिल रैपर में बुलाया जा रहा है और कॉल का नतीजा पारित हुआ ... कार्य नहीं। एक कार्यवाही मूल्यांकन से बचने के लिए एक शब्द-शब्द का उपयोग करना होगा:
>> array-initial-2: function [size value] [array/initial size :value]
>> array-initial-2: 10 array-initial-2 4 does [++ n]
[10 11 12 13]
लेकिन मैं एक सामान्य दृष्टिकोण की तलाश में था। ऐसा होने के बिना पैरामीटर प्रॉक्सी करने का सबसे अच्छा तरीका क्या है?
@ endo64 आप [एक प्रति जोड़ा] (http://stackoverflow.com/revisions/22892499/3) ... वह Rebol2 फ़ंक्शन है। Rebol3 में निर्णय समारोह के उस रूप को खत्म करने के लिए बनाया गया था ... यह अब क्या एक बार Funct रूप में जाना जाता था। उस तरह से अधिक उपयोगकर्ता के अनुकूल (और लाल संगत)। मेरे सुझाव हम मूल रूप से सिर्फ सभी कार्य Rebol2 कोड नमूने में उपयोग करता है और उसके बाद Rebol3 में कार्य करने के लिए सभी Funct स्विच ax करने की कोशिश है। – HostileFork
ओह ठीक है, मैं इसे भूल गया। – endo64