为什么我不能在Elixir闭包功能头中使用引脚操作符?

时间:2015-09-07 08:39:14

标签: elixir

通常在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

是否有理由这样做,以及获得相同结果的正确方法?

由于

3 个答案:

答案 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之外,引入了一个新的范围。

因此你无法固定 ,因为它是一个新的范围。