问题描述
我尝试过滤掉已删除的项目:
defp react_to_event({:delete,item},socket) do
id = item.id
filter_by_id = fn list ->
Enum.filter(list,fn
{:id,^id} -> false
_ -> true
end)
end
{
:noreply,socket
|> update(:new_items,&filter_by_id/1)
|> update(:items,&filter_by_id/1)
}
end
但似乎生命周期或范围在这里关闭:我在这里收到未使用的变量 filter_by_id
和未定义的函数 filter_by_id
错误。代码有什么问题?
解决方法
&filter_by_id/1
将在您的模块(或导入的模块)中查找命名的 filter_by_id/1
函数,而不是包含在 filter_by_id
变量中的匿名函数。
以下应该有效:
{
:noreply,socket
|> update(:new_items,filter_by_id)
|> update(:items,filter_by_id)
}
&
用于将命名函数捕获为变量并将它们作为函数参数传递,但匿名函数不需要捕获,因为它们首先已经可以赋值了。