我正在尝试在for-each循环中设置User模型的某些属性,但是我一直在跟踪错误
cannot invoke remote function x.token/0 inside match (elixir) src/elixir_fn.erl:9: anonymous fn/3 in :elixir_fn.translate/3 (stdlib) lists.erl:1353: :lists.mapfoldl/3 (elixir) src/elixir_fn.erl:14: :elixir_fn.translate/3
方法:
Enum.each(users, fn(user) ->
user.token = Comeonin.Bcrypt.hashpwsalt(to_string(user.id))
end)
最佳答案
这里有一些问题。 =
运算符是match运算符,不是赋值。为了从语法上解释错误,这看起来像是在匹配项左侧的函数调用,这是不允许的。
但是,这超出了您实际目标的意义。如果要使用新的bcrypt信息更新一组用户模型,则需要使用map函数:
users = Enum.map(users, fn %User{id: id}=user ->
%User{user| token: Comeonin.Bcrypt.hashpwsalt("#{id}")}
end)
您必须记住,Elixir中的所有内容都是不可变的。
关于elixir - 无法在匹配: Foreach loop中调用远程功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35682499/