我正在对一个元组进行解构并将其元素绑定到Erlang函数签名中的变量,如下所示:
store({X, Y}, State) ->
...
但有时我需要绑定源元组和其内容。到目前为止,我已用额外的代码处理了这个问题:
store(Point, State) ->
{X, Y} = Point,
...
但我是Erlang的新手并且想知道这是否天真。我的问题的灵感来自于Scala提取中的绑定:
case point@Point(x, y) => ???
是否有更好的方法同时绑定元组及其内容,或者最好是在单独的赋值中对元组进行解构?
答案 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
;