невозможно вызвать удаленную функцию внутри match: цикл Foreach

Я пытаюсь установить какое-то свойство модели пользователя внутри цикла for-each, но я продолжаю получать следующую ошибку

невозможно вызвать удаленную функцию x.token/0 внутри match (elixir) src/elixir_fn.erl:9: анонимная fn/3 в :elixir_fn.translate/3 (stdlib) lists.erl:1353: : lists.mapfoldl/3 (эликсир) src/elixir_fn.erl:14: :elixir_fn.translate/3

Метод:

Enum.each(users, fn(user) ->
  user.token = Comeonin.Bcrypt.hashpwsalt(to_string(user.id))
end)

person naveen    schedule 28.02.2016    source источник
comment
вы импортировали Comeonin.Bcrypt? Если вы это сделали, вы можете вызвать hashpwsalt без префикса, который может вызвать у вас проблемы.   -  person GavinBrelstaff    schedule 28.02.2016
comment
@GavinBrelstaff пробовал, все равно не работает   -  person naveen    schedule 28.02.2016
comment
Здесь hexdocs.pm/comeonin/Comeonin.Bcrypt.html написано, что есть функция init () — нужно ли это вызывать перед вызовом hashpwsalt?   -  person GavinBrelstaff    schedule 28.02.2016


Ответы (1)


Здесь есть несколько проблем. Оператор = – это оператор сопоставления, а не присваивание. Чтобы объяснить ошибку с точки зрения синтаксиса, это выглядит как вызов функции в левой части совпадения, что недопустимо.

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

users = Enum.map(users, fn %User{id: id}=user ->
          %User{user| token: Comeonin.Bcrypt.hashpwsalt("#{id}")}
        end)

Вы должны помнить, что все в Эликсире неизменно.

person asonge    schedule 28.02.2016