2017-10-24 1 views
1

Ich bin ziemlich neu zu Lua und etwas verwirrt darüber, wie Funktionen erklärt werden.Lua - Variationen in der Erklärung der Funktionen

scheinen diese zwei Varianten zu arbeiten: -

1. Variation

test = {calc = function (x,y) 
    z = x + y 
    return z 
end 
} 

result = test.calc (1,2) 
print (result) 

Zweite Variante

test = {} 

function test.calc(x,y) 
    z = x + y 
    return z 
end 

result = test.calc (1,2) 
print (result) 

Gibt es irgendwelche Auswirkungen eine bestimmte Variation der Auswahl?

+0

keinen Unterschied, Korrektur für die erste Variante: 'test = {calc = Funktion (x, y) z = x + y z Ende zurück}' –

+0

Außerdem verwenden 'local z = ...'. – lhf

+0

Ok danke..das löst das Geheimnis! So viel zu lernen! – Zalokin

Antwort

1

Sie haben genau die gleiche Wirkung. Wählen Sie das eine oder andere basierend auf Lesbarkeit. (Ich bevorzuge die zweite.)

+0

mit 'local test = {}' gibt es einen Unterschied. In diesem Fall hat funciton keinen Zugriff auf die Tabelle selbst. Aber es kann durch 'local test test = {}' behoben werden – moteus

0

Lua hat keine Funktionsdeklarationen. Es hat Funktionsdefinitionen, die Ausdrücke (1. Variante) sind, die einen Funktionswert bei der Auswertung zur Laufzeit erzeugen. Die anderen syntaktischen Formen sind effektiv eine Kombination aus einem Funktionsdefinitionsausdruck und einer Zuweisung.

In dieser 3. Variation ist das plus ein impliziter erster Parameter self. Es soll in einem "Methodenaufruf" auf einem Feld verwendet werden. Ein Methodenaufruf ist nur eine alternative Form des Funktionsaufrufs, der den Tabellenwert, der das Feld (den Funktionswert) enthält, als implizites erstes Argument übergibt, damit die Funktion darauf verweisen kann, insbesondere um auf die anderen Felder zuzugreifen.

3. Variation: Method

local test = { history = {} } 

function test:calc(x,y) 
    local z = x + y 
    table.insert(self.history, { x = x, y = y }) 
    return z 
end 

print(test.calc) 
local result = test:calc(1,2) 
print(result) 
print(test.history[1].x, test.history[1].y) 
Verwandte Themen