टीसीएल पर एक शुद्ध सैद्धांतिक प्रश्न।टीसीएल बेनामी कार्य
this question मैं सोच रहा था कि टीसीएल में अज्ञात कार्यों को लागू करने का सबसे अच्छा तरीका क्या होगा।
अंतिम परिणाम anohter proc के लिए एक तर्क के रूप में एक पूर्ण proc पारित करने के लिए एक डेवलपर के लिए अनुमति देता है किया जाना चाहिए: अब
do_something $data {proc {} {input} {
puts $input;
}};
जो जावास्क्रिप्ट के
do_something(data, function (input) {
alert(input);
});
करने के समान होगा, स्वाभाविक रूप से इस नहीं होगा काम ओओटीबी। मैं इस तरह के कुछ पर सोच रहा था:
proc do_something {data anon_function} {
anon_run $anon_function $data
}
proc anon_run {proc args} {
set rand proc_[clock clicks];
set script [lreplace $proc 1 1 $rand];
uplevel 1 $script;
uplevel 1 [concat $rand $args];
uplevel 1 rename $rand {}; //delete the created proc
}
यह काम करता है। लेकिन मैं उम्मीद कर रहा था कि इसके बाद बेहतर पैटर्न के लिए सुझाव प्राप्त करें, क्योंकि यह बहुत ही सुरुचिपूर्ण नहीं है और वास्तव में कूल टीसीएल सुविधाओं का उपयोग नहीं कर रहा है। अधिकतर मैं मैन्युअल रूप से anon_run
पर कॉल करने से छुटकारा पाना चाहता हूं।
यह भी ध्यान दें, जावास्क्रिप्ट के विपरीत यह बंद नहीं करता है। क्लोजर टीसीएल में सैद्धांतिक रूप से मुश्किल हैं क्योंकि वे वास्तव में टीसीएल के डाटाटाइप मॉडल के साथ फिट नहीं होते हैं, और ऊपर के रूप में लैम्ब्डा शब्द इस समस्या को विशेष रूप से स्पष्ट करते हैं (यह प्रक्रियाओं के साथ एक बड़ी समस्या नहीं है, केवल प्रोग्रामिंग का एक सरल मामला है)। –
मैं विस्तृत और अच्छी तरह से समझाया गया उत्तर की सराहना करता हूं। –
और मैंने वास्तव में मेरी परियोजनाओं में से एक के लिए एक [सीमित रूपों का सीमित] हैक किया है (https://chiselapp.com/user/kbk/repository/tclquadcode/artifact/9cd98bc023dd3ef1?ln=353,382)। –