通常在Elixir中我可以使用pin运算符来指定绑定到现有名称的值,即:
a = 1
{^a, b} = {1,2}
# b is now 2
按预期工作。
但是我似乎无法在闭包函数头中固定这样的值,即:
a = 1
f = fn
^a -> true
_ -> false
end
导致编译失败:
** (CompileError) iex:2: unbound variable ^a
是否有理由这样做,以及获得相同结果的正确方法?
由于
答案 0 :(得分:2)
您的代码在概念上没有任何错误。它不起作用,因为它是当前Elixir版本的限制,将在Elixir v1.2上解决。
您可以通过以下方式获得相同的结果:
Export-Csv
答案 1 :(得分:0)
上述问题的解决方法似乎是在闭包内部使用case语句,尽管它感觉不必要的复杂。
a = 1
f = fn n ->
case n do
^a -> true
_ -> false
end
end
f.(1)
# true
f.(2)
# false
虽然这有效,但它突出显示我不能直接在fn头中使用pin运算符。
答案 2 :(得分:0)
直接来自José在其他问题上的回答:
Elixir只允许在相同的范围和所有构造中重新绑定,除了case,cond和receive之外,引入了一个新的范围。
因此你无法固定 ,因为它是一个新的范围。