elixir - 无法在匹配: Foreach loop中调用远程功能

标签 elixir ecto

我正在尝试在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/

相关文章:

elixir - 如何在 Ecto 2.0 中通过 JSON 属性在 Repo.preload 中执行自定义选择查询?

testing - 对 Elixir Ecto 验证测试不起作用的原因感到困惑

elixir - Phoenix : Ordering a query set

sql - 使用子查询或连接将同一模式上的两个 ecto 查询合并为一个

elixir - ecto 中的虚拟模型

elixir - ets.lookup_element(Ecto.Registry, nil, 3) 自定义混合任务

elixir - Repo.update成功后,Ecto重新加载belongs_to关联

elixir - Elixir 中的同步障碍?

elixir - 如何在 Ecto 模型中定义虚拟属性

list - Elixir:生成给定参数出现 `n` 次的列表(类似于 Haskell 的复制)