Boolean x = true;
...
x = false;
Эрланга никогда не случится.Переменные Erlang могут быть назначены только один раз, что также означает, что вы не можете использовать var++
и var--
в erlang.
Вы можете использовать так называемые охранники в головепредложения функции для использования логических фильтров в аргументах функции.В страже запятая действует как &&
на других языках, а точка с запятой действует как ||
.
-module(my).
-compile(export_all).
guard: Y==1 && X
+----------+
| |
| |
go(X, Y) when Y==1, X ->
false;
go(_, _) ->
true.
go_test() ->
false = go(true, 1),
true = go(false, 1),
true = go(true, 20),
all_tests_passed.
В оболочке:
~/erlang_programs$ erl
Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V9.3 (abort with ^G)
1> c(my).
my.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,my}
2> my:go_test().
all_tests_passed
3>
Per Wotjek Surowkago/2
можно написать проще без охранников.Поскольку существует только одна комбинация аргументов, где результат равен false
, а все другие комбинации аргументов дают результат true
, вы можете написать:
go(true, 1) ->
false;
go(_, _) ->
true.