2015-09-12 8 views

risposta

5

No.

Se si può stare la differenza tra queste due espressioni thisismytable:whatismytable() invece di thisismytable.whatismytable, si potrebbe fare:

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

Testing:

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

Altro utilizzo:

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

Wow, è davvero una specie di genio. Grazie. – SideCode

+0

È una possibilità, ma non quel genio:/':' manda la tabella letta come primo argomento alla funzione chiamata - è solo un wrapper attorno al tuo tentativo con overhead di funzione. – Youka

+1

@Youka Sono d'accordo. Lo farei in modo semplice come nella domanda. –

4

Non è possibile. Io uso una funzione di supporto.

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)