2013-05-31 15 views
12

Zastanawiam się, czy istnieje ogólna konwencja dotycząca używania średników w Lua, a jeśli tak, to gdzie/dlaczego powinienem ich użyć? Pochodzę z programowania, więc kończenie instrukcji średnikiem wydaje się intuicyjnie poprawne. Jednak byłem zaniepokojony, dlaczego są one "optional", gdy ogólnie akceptowane są takie instrukcje końcowe średnika w innych językach programowania. Być może jest jakaś korzyść?Konwencje Lua Semicolon

Na przykład: Z lua programming guide, są wszystkie dopuszczalne równoważne i składniowo dokładne:

a = 1 
b = a*2 

a = 1; 
b = a*2; 

a = 1 ; b = a*2 

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

Autor wspomina również: Usually, I use semicolons only to separate two or more statements written in the same line, but this is just a convention.

Jest to powszechnie akceptowane przez społeczność Lua, czy jest inny sposób, który jest preferowany przez większość? Czy jest to tak proste jak moje osobiste preferencje?

Odpowiedz

19

Średnicy w języku Lua są na ogół wymagane tylko podczas pisania wielu instrukcji na linii.

Tak na przykład:

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

Alternatywnie zapisać jako:

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

Off szczycie mojej głowie, nie mogę sobie przypomnieć kiedykolwiek w Lua gdzie miał używać średnik.

Edycja: szukanie w odnośniku lua 5.2 Widzę jeszcze jedno wspólne miejsce, w którym trzeba użyć średników, aby uniknąć niejednoznaczności - gdzie znajduje się prosta instrukcja, po której następuje wywołanie funkcji lub parens, aby zgrupować złożoną instrukcję . Oto przykład instrukcji: 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

Bardzo przydatne. Dzięki! – MrHappyAsthma

+12

Właściwie, 'local a, b = 1,2 print (a + b)' jest ważne Lua i robi to, czego można się spodziewać. Aby uniknąć niejasności, potrzebujesz tylko średników. To samo dotyczy przestrzeni po drodze. To też działa "print (1) print (2)" – dualed