Как реализовать если еще

В Java 8 есть новые методы в Map, которые вы можете использовать с лямбдами для решения этой проблемы. Первый вариант, compute :

a.compute(key, (k, v) -> v+1);

Обратите внимание, что это работает только в том случае, если хэш инициализируется для всех возможных ключей.

Если это не гарантировано, вы можете изменить приведенный выше код на:

a.compute(key, (k, v) -> v == null ? 1 : v + 1);

Или использовать метод merge (который я бы предпочел):

a.merge(key, 1, (a, b) -> a + b);

Может быть, есть более лямбда-методы, о которых я не знаю.

22
задан Matt Fenwick 13 December 2012 в 09:18
поделиться

4 ответа

if
    A =:= B ->
        expr1;
    true ->
        expr2
end 

или

case A =:= B of
    true -> expr1;
    false -> expr2
end

, или

case A of
    B -> expr1;
    _ -> expr2
end

, или

  foo(A,B), ...

...
foo(X,X) -> expr1;
foo(_,_) -> expr2.
15
ответ дан 16 October 2019 в 03:36
поделиться
if
    a == b ->
        expr1;
    true ->
        exprElse
end

В Erlang нет ничего другого, вы просто сопоставьте с истиной. Дополнительную информацию можно найти в документации Erlang .

Вы должны обратить пристальное внимание на символы ';' терминатор:

if
    a == b ->
        clauseN,
        expr1;
    cond2 ->
        clause1,
        clause2,
        expr2;
    cond3 ->
        expr3;
    true ->
        exprElse
end 

Это не дружественный к копипасту язык.

32
ответ дан 16 October 2019 в 03:36
поделиться

Сопоставление с образцом - одна из многих сильных сторон Erlang, и его часто можно использовать вместо операторов if. Часто удобнее использовать сопоставление с образцом в аргументах функции или выражение case (которое также является сопоставлением с образцом).

Предположим, у вас есть функция some_function , которая принимает два аргумента. Если аргументы равны, вы оцениваете выражение1, в противном случае вы оцениваете выражение2. В erlang это можно выразить как:

some_function(A, A) -> expression1;
some_function(A, B) -> expression2.

Поразительно, сколь многого можно достичь с помощью такого простого сопоставления с образцом. С помощью защитных предложений вы можете выражать более сложные шаблоны, например,

some_function(A, B) when A < B -> expression3. 

Другая возможность - использовать case .. выражения .

19
ответ дан 16 October 2019 в 03:36
поделиться

Другой вариант:

case a of
    b -> expr1;  %% true
    _ -> expr2   %% false
end.
8
ответ дан 16 October 2019 в 03:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: