2015-09-12 10 views
6

वहाँ यह करने के लिए एक छोटा रास्ता नहीं है:आरंभीकरण के दौरान कैसे करने के लिए आत्म संदर्भ तालिका

local thisismytable = { 
    non = sequitur 
} 
thisismytable.whatismytable = thisismytable 

किसी भी मदद की सराहना की जाएगी। मैं पूर्व-मौजूदा कार्यक्षमता को फिर से बनाना नहीं चाहता हूं।

उत्तर

5

सं

आप इन दो भाव के बीच का अंतर खड़े हो सकते हैं, तो thisismytable:whatismytable()thisismytable.whatismytable के बजाय, आप कर सकता है:

local thisismytable = { 
    non = sequitur, 
    whatismytable = function (self) return self end 
} 

परीक्षण:

print(thisismytable) 
print(thisismytable:whatismytable()) 

अधिक उपयोग:

print(thisismytable:whatismytable().non) 
+0

वाह, यह वास्तव में प्रतिभाशाली है। धन्यवाद। – SideCode

+0

यह एक संभावना है, लेकिन वह प्रतिभा नहीं है:/': 'केवल एक्सेस टेबल को फ़ंक्शन कहने के लिए पहली तर्क के रूप में भेजता है - यह केवल फ़ंक्शन ओवरहेड के साथ आपके प्रयास के चारों ओर एक रैपर है। – Youka

+1

@Youka मैं सहमत हूं। मैं सिर्फ सवाल में इसे सरल तरीके से करूँगा। –

4

आप नहीं कर सकते। मैं एक सहायक समारोह का उपयोग करता हूं।

local function ref(t) 
    for k, v in next, t do 
    if v == ref then t[k] = t end 
    end 
    return t 
end 

local root = ref{left=ref, right=ref} 
assert(root.left == root) 
संबंधित मुद्दे