Я пытался изучить Erlang и столкнулся с некоторыми проблемами с завершением строк в функциях и операторах case
.
Когда я могу использовать точку с запятой (;
), запятую (,
) или точку внутри моих функций или case
операторов?
Я пытался изучить Erlang и столкнулся с некоторыми проблемами с завершением строк в функциях и операторах case
.
Когда я могу использовать точку с запятой (;
), запятую (,
) или точку внутри моих функций или case
операторов?
Запятая в конце строки обычного кода.
Точка с запятой в конце оператора case, оператора if и т. Д. Последний оператор case или if не имеет ничего в конце. Точка в конце функции.
пример (извините за имена случайных переменных, очевидно, что это ничего не делает, но иллюстрирует точку):
case Something of
ok ->
R = 1, %% comma, end of a line inside a case
T = 2; %% semi colon, end of a case, but not the end of the last
error ->
P = 1, %% comma, end of a line inside a case
M = 2 %% nothing, end of the last case
end. %% period, assuming this is the end of the function, comma if not the end of the function
Мне нравится читать точку с запятой как ИЛИ, запятую как И, точку с запятой как КОНЕЦ. Так
foo(X) when X > 0; X < 7 ->
Y = X * 2,
case Y of
12 -> bar;
_ -> ook
end;
foo(0) -> zero.
читается как
foo(X) when X > 0 *OR* X < 7 ->
Y = X * 2 *AND*
case Y of
12 -> bar *OR*
_ -> ok
end *OR*
foo(0) -> zero *END*
Это должно прояснить, почему нет; после последнего пункта дела.
X > 0; X < 7
когда-нибудь окажется ложным?
- person Jamie Forrest; 28.12.2012
В модулях точка используется для завершения атрибутов модуля и объявлений функций (также известных как «формы»). Вы можете запомнить это, потому что формы не являются выражениями (из них не возвращается значение), и поэтому точка представляет собой конец оператора.
Имейте в виду, что определения функций с разной степенью точности считаются отдельными операторами, поэтому каждое из них будет заканчиваться точкой.
Например, определения функций для hello/0
и hello/1:
hello() -> hello_world.
hello(Greeting) -> Greeting.
(Обратите внимание, что в оболочке erlang точка используется для завершения и оценки выражений, но это аномалия.)
Точка с запятой действует как разделитель предложений как для предложений функций, так и для ветвей выражений.
Пример 1, функциональные предложения:
factorial(0) -> 1;
factorial(N) -> N * fac(N-1).
Пример 2, ветви выражения:
if X < 0 -> negative;
X > 0 -> positive;
X == 0 -> zero
end
Запятая - это разделитель выражений. Если после выражения следует запятая, это означает, что в предложении после нее стоит другое выражение.
hello(Greeting, Name) ->
FullGreeting = Greeting ++ ", " ++ Name,
FullGreeting.
X == 0 -> zero
в Примере 2.
- person Tommy; 21.01.2016
Вы можете думать об этом как о английской пунктуации. Запятые используются для разделения элементов в серии, точки с запятой используются для разделения двух очень тесно связанных независимых предложений [1] (например, разные случаи оператора case, предложения функций с одинаковым именем и арностью, которые соответствуют разным шаблонам) и точки. используются для завершения предложения (полная мысль).
Запятая разделяет выражения, аргументы или элементы списка / кортежа или двоичного файла. Он перегружен.