2013-05-31 10 views
12

Ich frage mich, ob es eine allgemeine Konvention für die Verwendung von Semikola in Lua gibt, und wenn ja, wo/warum sollte ich sie verwenden? Ich komme aus einem Programmierhintergrund, daher scheint die Beendigung von Anweisungen mit einem Semikolon intuitiv korrekt. Allerdings war ich besorgt, warum sie "optional" sind, wenn es allgemein akzeptiert, dass Semikolons Anweisungen in anderen Programmiersprachen beenden. Vielleicht gibt es einen Vorteil?Lua Semikolon Konventionen

Zum Beispiel: Von den lua programming guide, diese sind alle akzeptabel, das entspricht, und syntaktisch genau:

a = 1 
b = a*2 

a = 1; 
b = a*2; 

a = 1 ; b = a*2 

a = 1 b = a*2 -- ugly, but valid 

Der Autor erwähnt auch: Usually, I use semicolons only to separate two or more statements written in the same line, but this is just a convention.

Ist dies in der Regel von der Gemeinde Lua akzeptiert, oder ist Gibt es einen anderen Weg, der von den meisten bevorzugt wird? Oder ist es so einfach wie meine persönliche Vorliebe?

Antwort

19

Semikolons in Lua werden im Allgemeinen nur benötigt, wenn mehrere Anweisungen in einer Zeile geschrieben werden.

So zum Beispiel:

local a,b=1,2; print(a+b) 

Alternativ geschrieben:

local a,b=1,2 
print(a+b) 

Aus der Spitze von meinem Kopf, ich kann nicht jede andere Zeit in Lua erinnern, wo ich hatte zu verwenden ein Semikolon.

Bearbeiten: in der Lua 5.2 Referenz suchen Ich sehe einen anderen gemeinsamen Ort, wo Sie Semikolons zur Vermeidung von Mehrdeutigkeit verwenden müssten - wo Sie eine einfache Anweisung gefolgt von einem Funktionsaufruf oder Parens eine zusammengesetzte Aussage zu gruppieren . Hier ist das Handbuch Beispiel here:

Function calls and assignments can start with an open parenthesis. This 
possibility leads to an ambiguity in the Lua grammar. Consider the 
following fragment: 

a = b + c 
(print or io.write)('done') 

The grammar could see it in two ways: 

a = b + c(print or io.write)('done') 

a = b + c; (print or io.write)('done') 
+0

Sehr informativ. Vielen Dank! – MrHappyAsthma

+12

Tatsächlich ist 'local a, b = 1,2 print (a + b)' gültig für Lua und macht das, was Sie erwarten würden. Sie benötigen nur Semikolons, um Mehrdeutigkeiten zu vermeiden. Das Gleiche gilt für Leerzeichen. So funktioniert das auch 'print (1) print (2)' – dualed