是否有可能在函数定义中匹配一些touple的子集并且仍然可以在方法中获得完整的操作?
我想做的是这样的事情:
myfun({ foo, Bar }: Var) -> otherfunction(Var, stuff).
而不是:
myfun({ foo, Bar }) -> otherfunction({ foo, Bar }, stuff).
我希望这很清楚。
感谢。
答案 0 :(得分:6)
您可以通过在前面放置下划线来忽略某些参数。 E.g。
myfun( {foo, _Bar, Var } )
将通过忽略_Bar参数进行匹配。那是你的想法吗?
或者你的意思是:
myfun( {foo, Bar} = Var ) -> otherfun( Var ).
在这种情况下, var 将在 otherfun 中使用,如果与 myfun 的匹配成功。原因是: Var 在评估表达式时是未绑定的,因此将被分配给 {foo,Bar} 。
答案 1 :(得分:5)
也许这就是你的意思:
myfun({foo, Bar } = Var) ->
otherfunction(Var, stuff).
这样,您可以将您的函数导出为myfun / 1(一个参数)。它只会在元组上与两个元素匹配。第一个必须是“foo”原子,而第二个可以是任何东西。除非为函数指定不同的子句,否则在所有其他情况下都将获得一个函数子句。例如,拥有:
是有意义的myfun({foo, Bar } = Var) ->
otherfunction(Var, stuff);
myfun(Var) ->
{error, bad_format}.
但是,我并不完全确定这是你所要求的。如果这有帮助,请告诉我。
答案 2 :(得分:-3)
如果我有这个正确的话,你想要的是设置Var
,只包含匹配{ foo, Bar }
的符号,而不需要做任何额外的检查,为了简洁起见。
就我所见,你不能在Erlang中做到这一点。抱歉。 :)