是否有可能在函数定义中匹配一个 touple 的某个子集并且仍然在方法中获得完整的 touple ?
我想做的是这样的:
myfun({ foo, Bar }: Var) -> otherfunction(Var, stuff).
代替:
myfun({ foo, Bar }) -> otherfunction({ foo, Bar }, stuff).
我希望这足够清楚。
谢谢。
是否有可能在函数定义中匹配一个 touple 的某个子集并且仍然在方法中获得完整的 touple ?
我想做的是这样的:
myfun({ foo, Bar }: Var) -> otherfunction(Var, stuff).
代替:
myfun({ foo, Bar }) -> otherfunction({ foo, Bar }, stuff).
我希望这足够清楚。
谢谢。
您可以通过在前面加上下划线来忽略某些参数。例如
myfun( {foo, _Bar, Var } )
将通过忽略 _Bar 参数来匹配。你是这么想的吗?
或者你的意思是:
myfun( {foo, Bar} = Var ) -> otherfun( Var ).
在这种情况下,如果与myfun匹配成功,则会在otherfun中使用Var。原因是: Var在评估表达式时未绑定,因此将分配给{foo, Bar}。
也许这就是你的意思:
myfun({foo, Bar } = Var) ->
otherfunction(Var, stuff).
这样,您可以将函数导出为 myfun/1(一个参数)。它将仅匹配具有两个元素的元组。第一个必须是“foo”原子,而第二个可以是任何东西。在所有其他情况下,您将获得一个函数子句,除非您为该函数指定不同的子句。例如,拥有以下内容是有意义的:
myfun({foo, Bar } = Var) ->
otherfunction(Var, stuff);
myfun(Var) ->
{error, bad_format}.
不过,我不完全确定这是您要问的。请让我知道这是否有帮助。
如果我有这个正确的,你想要的是Var
必须设置,只包含一个匹配{ foo, Bar }
,而不必做任何额外的检查,为了简洁起见。据我所见,你不能在 Erlang 中做到这一点。对不起。:)