无法在匹配内调用远程函数:Foreach循环

时间:2016-02-28 12:25:20

标签: elixir ecto

我试图在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)

1 个答案:

答案 0 :(得分:15)

这里有一些问题。 =运算符是匹配运算符,它不是赋值。为了解释错误,语法方面,这看起来像匹配的左侧的函数调用,这是不允许的。

但这不是你实际目标的重点。如果您想要使用新的bcrypt信息更新一组用户模型,则需要使用map函数:

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

你必须记住,Elixir中的所有东西都是不可改变的。