2015-05-20 3 views
0

Я знаю, что запись в Erlang не может быть изменена после ее установки. Я пытаюсь использовать запись, чтобы увеличить значение.Изменение записи Erlang

add_new_num() -> 
    Number = random:uniform(6), 
    STR = #adder{value = 7}, 
    New = add(STR, Number).   

add(#adder{value =V} = Adder, Value) -> 
    Adder#adder{value = V + Value}. 

При запуске add_new_num() я всегда получите 7 + Number. Это не то, что я хочу. Я хочу заставить его сделать следующее.

add_new_num() -> 7 + Number = Val 
add_new_num() -> Val + Number = Val2 
add_new_num() -> Val2 + Number = Val3 
... 

Как я могу это достичь?

ответ

1

Существуют различные способы сделать это. Подумайте, где вы хотите сохранить значение: у Erlang нет «статических переменных», таких как C, поэтому сама функция не может запомнить значение.

Вы можете передать текущую запись в качестве аргумента в add_new_num и получить обновленную запись из ее возвращаемого значения. Вы можете сохранить процесс запущен и отправить сообщения для запроса на текущее значение и попросить его увеличить значение. Или вы можете сохранить значение в ETS table, или даже Mnesia.

+0

Как я могу перейти к обновлению записи из возвращаемого значения @legoscia – Jonathan

Смежные вопросы