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

nav*_*een 9 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)
Run Code Online (Sandbox Code Playgroud)

aso*_*nge 15

这里有一些问题.该=操作是匹配运营商,它不是分配.为了解释错误,语法方面,这看起来像匹配的左侧的函数调用,这是不允许的.

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

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

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