匿名函数的可见性和生命周期
Visibility and lifecycle of an anonymous function
我尝试过滤掉已删除的项目:
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)
}
&
用于捕获命名函数作为变量并将其作为函数参数传递,但不需要捕获匿名函数,因为它们已经可以在第一时间进行赋值。
我尝试过滤掉已删除的项目:
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)
}
&
用于捕获命名函数作为变量并将其作为函数参数传递,但不需要捕获匿名函数,因为它们已经可以在第一时间进行赋值。