3

是否有可能在函数定义中匹配一个 touple 的某个子集并且仍然在方法中获得完整的 touple ?

我想做的是这样的:

myfun({ foo, Bar }: Var) -> otherfunction(Var, stuff).

代替:

myfun({ foo, Bar }) -> otherfunction({ foo, Bar }, stuff).

我希望这足够清楚。

谢谢。

4

3 回答 3

7

您可以通过在前面加上下划线来忽略某些参数。例如

myfun( {foo, _Bar, Var } )

将通过忽略 _Bar 参数来匹配。你是这么想的吗?

或者你的意思是:

myfun( {foo, Bar} = Var ) -> otherfun( Var ).

在这种情况下,如果与myfun匹配成功,则会在otherfun中使用Var。原因是: Var在评估表达式时未绑定,因此将分配给{foo, Bar}

于 2009-11-04T23:32:14.770 回答
5

也许这就是你的意思:

myfun({foo, Bar } = Var) ->
  otherfunction(Var, stuff).

这样,您可以将函数导出为 myfun/1(一个参数)。它将仅匹配具有两个元素的元组。第一个必须是“foo”原子,而第二个可以是任何东西。在所有其他情况下,您将获得一个函数子句,除非您为该函数指定不同的子句。例如,拥有以下内容是有意义的:

myfun({foo, Bar } = Var) ->
  otherfunction(Var, stuff);
myfun(Var) ->
  {error, bad_format}.

不过,我不完全确定这是您要问的。请让我知道这是否有帮助。

于 2009-11-04T23:31:44.680 回答
-3

如果我有这个正确的,你想要的是Var必须设置,只包含一个匹配{ foo, Bar },而不必做任何额外的检查,为了简洁起见。据我所见,你不能在 Erlang 中做到这一点。对不起。:)

于 2009-11-04T23:37:24.883 回答