Контракты Луа-Семиколона
Мне было интересно, существует ли общее соглашение об использовании точек с запятой в 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, и я действительно, действительно, забываю, что вам не нужна точка с запятой (;
), каждый раз, когда я пишу новую строку!