Контракты Луа-Семиколона

Мне было интересно, существует ли общее соглашение об использовании точек с запятой в Lua, и если да, то где/почему я должен их использовать? Я исхожу из фона программирования, поэтому конечные утверждения с точкой с запятой кажутся интуитивно правильными. Однако я был обеспокоен тем, почему они "optional", когда его общепринятые утверждения оканчиваются точкой с запятой на других языках программирования. Возможно, есть какая-то польза?

Например: из руководство по программированию lua, все они приемлемы, эквивалентны и синтаксически точны:

a = 1
b = a*2

a = 1;
b = a*2;

a = 1 ; b = a*2

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

Автор также упоминает: Usually, I use semicolons only to separate two or more statements written in the same line, but this is just a convention.

Общепризнано ли это сообществом Lua, или существует ли другой способ, который предпочитают большинство? Или это так же просто, как мои личные предпочтения?

Ответ 1

Точка с запятой в Lua обычно требуется только при написании нескольких операторов в строке.

Так, например:

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

Альтернативно написано как:

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

Вдобавок ко всему, я не могу вспомнить другой раз в Луа, где мне приходилось использовать точку с запятой.

Редактировать: просматривая ссылку на lua 5.2, я вижу еще одно распространенное место, где вам нужно использовать точки с запятой, чтобы избежать двусмысленности, - когда у вас есть простое утверждение, за которым следует вызов функции или скобки для группировки составного оператора. Вот ручной пример, расположенный здесь:

--[[ 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')

Ответ 2

Для того, чтобы иметь более одной вещи в строке, например:

c=5
a=1+c
print(a) -- 6

может быть сокращено до:

c=5; a=1+c; print(a) -- 6

Также стоит отметить, что если вы привыкли к Javascript или что-то в этом роде, где вы должны заканчивать строку точкой с запятой (;), и вы особенно привыкли это писать, то это означает, что у вас не будет чтобы удалить эту точку с запятой (;) и поверьте мне, я тоже привык к Javascript, и я действительно, действительно, забываю, что вам не нужна точка с запятой (;), каждый раз, когда я пишу новую строку!