2016-07-08 29 views
1

Ich habe eine Tabelle von Funktionen, die ein Argument und die Funktionen benötigt werden, mit einer Schnur markiertWie kann ich eine Funktion aufrufen, die sich in einer Tabelle befindet, die durch eine Zeichenfolge indiziert wird, die ich von einer anderen Funktion erhalte, und ich auch Argumente hinzufügen muss?

local tbl = {fnct1 = function(x), fnct2 = function(x), ...} 

Dieser String kann ich in einer Tabelle erhalten, die ich von einer anderen Funktion zurückgegeben.

fnct1 = str[1] 

Diese Funktion sollte eine Tabelle zurückgeben. Wo setze ich das Argument beim Aufruf der Funktion? Dies gilt nicht zu funktionieren scheint:

table = tbl[str[1](x)] 
+0

Versuchen Sie 'tbl [str [1]] (x)'. – lhf

Antwort

2

Wie @lhf erklärte:

tbl[str[1]](x) 

Es könnte helfen, zu wissen, dass eine Funktion ein Wert ist.

Syntaktisch "erwerben" Sie jeden Wert durch einen Ausdruck. Wenn Sie einen Wert erwerben, den Sie für eine Funktion halten, können Sie ihn aufrufen.

Die Syntax für einen Funktionsaufruf ist der Ausdruck für den Wert gefolgt von Klammern mit 0 oder mehr Parameterausdrücken zwischen.

So tbl[str[1]] ist ein Ausdruck, und der Anruf wird bezeichnet durch ( und ) und x ist der Ausdruck für einen Parameter. Beide Ausdrücke werden ausgewertet und der Aufruf wird versucht. Wenn der Ausdruck vor den Klammern nicht zu einem Funktionswert ausgewertet wurde, erhalten Sie einen Laufzeitfehler.

Unterbrechen Sie weiter, eine Tabelle ist ein Wert, die Schlüssel-Wert-Paare mit eindeutigen Schlüsseln aggregiert. (Der Schlüssel ist ein Wert und der "Wert" ist ein Wert.) Um einen "Wert" aus einer Tabelle zu erhalten, indizieren Sie die Tabelle mit dem Schlüssel. Die prototypische Syntax lautet: expression0 [ expression1 ], wobei expression0 zu einem Tabellenwert ausgewertet werden sollte und expression1 sollte zum Schlüsselwert ausgewertet werden. Sie können das rekursiv auf tbl[str[1]] anwenden.

[Als Erleichterung, wenn ein Schlüssel ist eine Zeichenfolge, die die Regeln für Bezeichner trifft sie, können sie mit dem . Operator-Index (oder mit einem Funktionsaufruf kombiniert, die : Operator).]

1

Wo Sie normalerweise die Argumente? Nach der Funktion.

Wenn also die Funktion tbl[str[1]] ist, fügen Sie sie einfach wie folgt hinzu: tbl[str[1]](args).