मैं वर्तमान में संदर्भ कक्षाओं का उपयोग कर एक पैकेज लिख रहा हूं।संदर्भ कक्षाएं, टैब पूर्णता और मजबूर विधि परिभाषा
Method initialisation in R reference classes
Can't reliably use RefClass methods in Snowfall
मैं इकट्ठा के कारण होता है क्योंकि संदर्भ तरीकों सब हर कॉपी नहीं हुए हैं कक्षा में आपत्ति नहीं बल्कि वे हैं: मैं जो विभिन्न स्रोतों पढ़ने से किसी समस्या का सामना आए हैं पहली बार पहुंचे जब कॉपी किया गया।
https://stat.ethz.ch/pipermail/r-devel/2011-June/061261.html
एक उदाहरण के रूप को परिभाषित:
test <- setRefClass("TEST",
fields = list(a = "numeric"),
methods = list(
addone = function(){
a <<- a+1
},
initialize = function(){
a <<- 1
}
)
)
example <- test$new()
इसलिए उदाहरण के वर्ग TEST
की एक नई वस्तु है। टाइपिंग example$
और कंसोल में टैब
> example$
# example$.->a example$.refClassDef example$.self
# example$a example$initialize
तो विधि addone
एक विकल्प के रूप में प्रस्तुत नहीं किया गया है देता है। यह कॉल तथापि के लिए उपलब्ध है:
example$addone()
अब टैब फिर से
# >
# > example
# Reference class object of class "TEST"
# Field "a":
# [1] 2
# > example$
# example$.->a example$.refClassDef example$.self
# example$a example$addone example$field
# example$initialize example$show
तो अब addone
और field
और show
विकल्प के रूप में प्रस्तुत कर रहे हैं पता चलता है।
मार्टिन मॉर्गन उपरोक्त लिंक में से किसी एक में विधियों की परिभाषा को बल देने की सलाह देता है। यह काम करता है अच्छी तरह से
test <- setRefClass("TEST",
fields = list(a = "numeric"),
methods = list(
addone = function(){
a <<- a+1
},
initialize = function(){
a <<- 1
.self$addone #force definition
}
)
)
example <- test$new()
तो अब tabbing देता है:
# > example$
# example$.->a example$.refClassDef example$.self
# example$a example$addone example$initialize
मेरी कक्षाओं में से कुछ 30 से अधिक तरीकों तो मैं के रूप में succintly संभव के रूप में यह करने के लिए करना चाहते हैं। मैं परिभाषित किया है:
test <- setRefClass("TEST",
fields = list(a = "numeric"),
methods = list(
addone = function(){
a <<- a+1
},
initialize = function(){
a <<- 1
eval(parse(text=paste0('.self$',ls([email protected]))))
}
)
)
example <- test$new()
टैब अब देता है:
# > example$
# example$.->a example$.refClassDef example$.self
# example$a example$addone example$callSuper
# example$copy example$export example$field
# example$getClass example$getRefClass example$import
# example$initFields example$initialize example$show
# example$trace example$untrace
जबकि इस काम करता है यह थोड़ा अनाड़ी लगता है। [email protected]
का उपयोग getRefClass("TEST")[email protected]
के बजाय किया जाता है ताकि थोड़ा गलत महसूस हो। क्या किसी ने इस मुद्दे से पहले निपटाया है।
क्या समाधान से संपर्क करने का कोई बेहतर तरीका है? यदि सवाल अत्यधिक निकाला जाता है तो किसी भी सलाह और माफ़ी के लिए धन्यवाद।
धन्यवाद कि मेरे समाधान से बहुत उपयोगी और अधिक सुरुचिपूर्ण है। इसके अलावा मुझे नहीं पता था कि इसे टैब पूर्ण करने के लिए कहा गया था। इस शब्द को जानने से मुझे यूटिल में प्रासंगिक पैकेज ढूंढने में मदद मिली। संदर्भ कक्षाओं के साथ टैब पूर्णता मेरा उद्देश्य था और मैं इसे बेहतर ढंग से प्रतिबिंबित करने के लिए प्रश्न शीर्षक संपादित करूंगा। – jdharrison
यह बहुत ही आशाजनक प्रतीत होता है। क्या यह 'DollarNames.envRefClass <- फ़ंक्शन (एक्स, पैटर्न) grep (पैटर्न, getRefClass (कक्षा (x)) $ विधियों(), value = TRUE) को जोड़ने के लिए एक बुरा विचार होगा? मेरे पैकेज में? – jdharrison
हां, यह एक बुरा विचार होगा - आप केवल अपने ही नहीं, बल्कि सभी संदर्भ वर्गों के लिए व्यवहार बदल देंगे। शायद कुछ वर्तमान व्यवहार की तरह, संभवतया 'विधियों' कुछ भविष्य की तारीख में एक सुपर-डुप्लिकर 'डोलरनाम.एएनवीआरफ क्लास' लागू करेंगे और आपकी लंबी भूल गई विधि फिर इसे ओवरराइड कर देगी। ऐसा करने के लिए सही बात यह है कि आर-डेवेल पर फीचर अनुरोध के रूप में इसे लाने के लिए, विशेष रूप से अब आपके पास उचित व्यवहार करने वाले व्यवहार को चित्रित करने के लिए कम से कम एक कामकाजी प्रोटोटाइप है। –