मेरे पास कैश मूल्यांकन के लिए एक फ़ंक्शन है। तर्कों में से एक के रूप में, यह एक फ़ंक्शन हैंडल लेता है। कुछ परिस्थितियों में, फ़ंक्शन हैंडल अप्राप्य है, और मुझे समझ में नहीं आता कि क्यों। उदाहरण के नीचे से पता चलता क्या हो गया मुझे स्टम्प्ड:मैं फ़ंक्शन हैंडल कब पास कर सकता हूं?
>> A.a = @plus; feval(@A.a, 1, 1)
ans =
2
>> clear A
>> A.a.a = @plus; feval(@A.a.a, 1, 1)
Error using feval
Undefined function 'A.a.a' for input arguments of type 'double'.
तो, अगर मैं एक समारोह के लिए एक संरचना सदस्य के रूप में जमा संभाल है, मैं अगर यह एक स्तर गहरी है ठीक साथ इसे पारित कर सकते हैं, लेकिन नहीं करता है, तो यह दो स्तर नीचे है। मेरे असली उपयोग मामले में, मेरे पास एक संरचना D
है जिसमें विभिन्न वर्गों के कई (117) उदाहरण हैं, इसलिए मेरे पास वास्तव में stct.obj.meth
है, जहां stct
एक संरचना है, obj
एक क्लास इंस्टेंस/ऑब्जेक्ट है, और meth
एक विधि है। @stct.obj.meth
पास करने में विफल रहता है, लेकिन अगर मैं A = stct.obj
असाइन करता हूं, तो @A.meth
उत्तीर्ण हो जाता है।
मैं किस स्थिति के तहत एक फ़ंक्शन हैंडल को तर्क के रूप में पास कर सकता हूं, ताकि यह अभी भी ढेर के नीचे पहुंच योग्य हो?
संपादित: उपरोक्त उपयोग के मामले में हालांकि, मैं उसे आसानी से हटा सकता है @
क्योंकि @plus
पहले से ही एक समारोह संभाल है। हालांकि, स्थिति यहां पर विचार करें:
>> type cltest.m
classdef cltest < handle
methods
function C = mymeth(self, a, b)
C = a + b;
end
end
end
>> A.a = cltest();
>> feval(@A.a.mymeth, 1, 1)
Error using feval
Undefined function 'A.a.mymeth' for input arguments of type 'double'.
>> b = A.a;
>> feval(@b.mymeth, 1, 1)
ans =
2
इस मामले में, मैं जरूरत @
A.a.mymeth
से पहले ...
मैं क्यों '@ Aamymeth' एक वैध समारोह संभाल उत्पादन नहीं करता है के लिए एक अच्छा स्पष्टीकरण की जरूरत नहीं है, लेकिन यह ध्यान देने योग्य बात है कि अपने पहले उदाहरण में अतिरिक्त' @ 'नहीं है लायक है जरूरत है। आप 'एए = @ प्लस का उपयोग कर सकते हैं; feval (एए, 1,1); 'क्योंकि' ए 'पहले से ही एक समारोह सूचक है। – nispio
@ निस्पियो हां। वह पहले की गलती थी, अब हटा दिया गया, जवाब। – gerrit