无法在匹配中调用远程函数:Foreach 循环
cannot invoke remote function inside match : Foreach loop
我试图在 for-each 循环中设置一些 属性 用户模型,但我不断收到以下错误
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 中的一切都是不可变的。
我试图在 for-each 循环中设置一些 属性 用户模型,但我不断收到以下错误
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 中的一切都是不可变的。