我试图在for-each循环中设置User模型的某些属性,但我不断收到错误
无法调用匹配内的远程函数x.token / 0 (elixir)src / elixir_fn.erl:9:匿名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)
答案 0 :(得分:15)
这里有一些问题。 =
运算符是匹配运算符,它不是赋值。为了解释错误,语法方面,这看起来像匹配的左侧的函数调用,这是不允许的。
但这不是你实际目标的重点。如果您想要使用新的bcrypt信息更新一组用户模型,则需要使用map函数:
users = Enum.map(users, fn %User{id: id}=user ->
%User{user| token: Comeonin.Bcrypt.hashpwsalt("#{id}")}
end)
你必须记住,Elixir中的所有东西都是不可改变的。