在Erlang中同时绑定元组及其结构化元素

时间:2014-09-24 03:34:33

标签: functional-programming erlang

我正在对一个元组进行解构并将其元素绑定到Erlang函数签名中的变量,如下所示:

store({X, Y}, State) ->
    ...

但有时我需要绑定源元组其内容。到目前为止,我已用额外的代码处理了这个问题:

store(Point, State) ->
  {X, Y} = Point,
  ...

但我是Erlang的新手并且想知道这是否天真。我的问题的灵感来自于Scala提取中的绑定:

case point@Point(x, y) => ???

是否有更好的方法同时绑定元组及其内容,或者最好是在单独的赋值中对元组进行解构?

2 个答案:

答案 0 :(得分:14)

你可以写

store({X, Y} = Point, State) ->
  ...

与Scala示例类似。

答案 1 :(得分:2)

如果您使用

store({X, Y}, State) -> ... 在这种情况下,当您调用类似mod:store({x, y, z}, state)的函数时,它将引发异常: error: no function clause matching mod:store{x, y, z}, state);

如果您使用

store(Point, State) -> {X, Y} = Point, ... 在这种情况下,当您调用类似mod:store({x, y, z}, state)的函数时,它将引发异常: error: no match of right hand side value {x, y, z} in function mod:store/2;