Functional programming 在Erlang中同时绑定元组及其分解元素

Functional programming 在Erlang中同时绑定元组及其分解元素,functional-programming,erlang,Functional Programming,Erlang,我正在分解元组并将其元素绑定到Erlang函数签名中的变量,如下所示: store({X, Y}, State) -> ... 但有时我需要绑定源元组及其内容。到目前为止,我已经用一行额外的代码处理了这个问题: store(Point, State) -> {X, Y} = Point, ... 但我对二郎还不熟悉,不知道这是否幼稚。我的问题是受Scala提取中绑定的启发: case point@Point(x, y) => ??? 是否有更好的方法同时绑

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

store({X, Y}, State) ->
    ...
但有时我需要绑定源元组及其内容。到目前为止,我已经用一行额外的代码处理了这个问题:

store(Point, State) ->
  {X, Y} = Point,
  ...
但我对二郎还不熟悉,不知道这是否幼稚。我的问题是受Scala提取中绑定的启发:

case point@Point(x, y) => ???
是否有更好的方法同时绑定元组及其内容,或者最好在单独的赋值中分解元组?

如果使用


存储({X,Y},State)->
...
在这种情况下,当您调用类似于
mod:store({x,y,z},state)
的函数时,它将引发异常:
错误:没有与mod:store{x,y,z},state)匹配的函数子句

而如果你使用


存储(点、状态)->
{X,Y}=点,
...
在这种情况下,当您调用类似于
mod:store({x,y,z},state)
的函数时,它将引发异常:
错误:右侧值{x,y,z}不匹配
在函数mod:store/2中

您可以编写

store({X, Y} = Point, State) ->
  ...
其工作原理与Scala示例类似