दुर्भाग्य से चीजों की तरह दोनों एकल कार्यों आर में काम नहीं करते इसलिए मैं निम्नलिखित तरीके से एकल कार्यों के लिए "+" ऑपरेटर को ओवरलोड करने की कोशिश की हैं:ऑपरेटर आर में कार्यों के लिए अधिक भार - अजीब व्यवहार <code>(f+g)(3)</code> जहां च और छ
"+.function" = function(e1, e2){
return(function(x) e1(x) + e2(x))
}
लेकिन अगर मैं इसका उपयोग करने की कोशिश करता हूं, तो यह कुछ भी नहीं करता है। के रूप में अगर +.function
भी परिभाषित नहीं है कोड
a = function(x) 2*x
(a+a)(2)
वही त्रुटि पैदा करता है।
कुछ समय के आसपास मुझे पता चला कि वास्तव में इस तरह से कार्यों को जोड़ने की संभावना है: यदि कार्य संदर्भ वर्ग के सदस्य कार्य हैं, तो यह काम करता है! यानी, निम्नलिखित कोड (ऊपर से "+" परिभाषा के साथ)
clsA = setRefClass("clsA",
methods = list(
b = function(x) 2*x
))
inst_a = clsA$new()
(inst_a$b + inst_a$b)(2)
"8" (अपेक्षित के रूप में) लौटाता है। इसलिए मेरे पास मेरी समस्या के लिए पहले से ही कुछ प्रकार का कामकाज है। अब मेरे प्रश्न हैं:
इस अजीब व्यवहार का कारण क्या है? +.function
क्यों नहीं है "सामान्य" फ़ंक्शन के बारे में परवाह है लेकिन वर्ग सदस्य कार्य करता है? क्या किसी को यह पता है कि ऑपरेटर को सामान्य कार्यों में "विस्तार" कैसे किया जाता है?
यदि आप कक्षा की कक्षा को फिर से परिभाषित करते हैं, उदाहरण के लिए कक्षा (ए) <- "परीक्षण", और अपना "+। फ़ंक्शन" "+ .test", फिर (ए + ए) (2) काम करता है। तो ऐसा लगता है कि समारोह वर्ग किसी भी तरह विशेष है। –
अच्छा, यह काम करता है :-) ठीक है, कोई भी इसे अभी भी एक कामकाज के रूप में देख सकता है, लेकिन मुझे लगता है कि यह संदर्भ वर्ग के साथ मेरे विचार से कहीं अधिक "चालाक" कामकाज है। इस विचार के लिए बहुत बहुत धन्यवाद! –