Hier ist ein Lua-Transkript 5.2.2, die Erklärung und die Indizierung einer Tabelle zeigt:Warum werden Tabellenliterale anders als Tabellenreferenzen in Lua behandelt?
> mylist = {'foo', 'bar'}
> print(mylist[1])
foo
Warum nicht die folgende Anweisung legal ist?
> print({'foo', 'bar'}[1])
stdin:1: ')' expected near '['
ich keine andere Sprache denken kann, wo eine wörtliche kann nicht für einen Verweis ersetzt werden (außer natürlich, wenn ein L-Wert erforderlich ist).
FWIW, einklammern die Tabelle wörtliche die Aussage Recht macht:
> print(({'foo', 'bar'})[1])
foo
+1; das erklärt eigentlich den Grund. Ich bin aber kein Freund der "foo" bar "=> foo (" bar ")" syntaktischer Zucker. – dualed
@dualed Nun, wenn es nur zur Vermeidung eines Paares von Parens verwendet würde, würde ich zustimmen, aber die wahre Macht dieses "Zuckers" ist offensichtlich, wenn man domänenspezifische Sprachen entwirft. Zum Beispiel, etwas wie 'Widget {w = 100, h = 10} "Warnung" "Stapelüberlauf in der Frobnicator!" 'Ist reguläre Lua-Syntax und kann leicht durch die" Widget "-Funktion mit einigen Schließung Tricks geparst werden , ohne einen Parser schreiben zu müssen! Dies kann sehr nützlich sein, wenn Sie Lua als Konfigurationssprache oder für andere Anwendungen verwenden, bei denen Endbenutzer keine erfahrenen Programmierer sind, oder um benutzerdefinierte Datenbeschreibungssprachen zu erstellen. –
Ich stimme überhaupt nicht zu, diese Art von Sachen verwirrt nur einen Benutzer, vor allem, wenn sie einige Fehler machen. Die Fehlermeldung würde für sie niemals Sinn ergeben. Je. Sicherere Verwendung der einfachen Lua-Syntax, einiger existierender plist, xml, ini, du nennst es oder erstellst sogar deine eigenen und schreibst einen echten Parser dafür. – dualed