是否有可能在函数定义中匹配做一些touple的子集,并且仍然可以在方法中获得完整的touple?Erlang与别名匹配的模式
我想要做的是这样的:的
myfun({ foo, Bar }: Var) -> otherfunction(Var, stuff).
代替:
myfun({ foo, Bar }) -> otherfunction({ foo, Bar }, stuff).
我希望这是非常明显的。
谢谢。
是否有可能在函数定义中匹配做一些touple的子集,并且仍然可以在方法中获得完整的touple?Erlang与别名匹配的模式
我想要做的是这样的:的
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).
,瓦尔将在otherfun当且仅当比赛与myfun成功使用。其原因是:瓦尔是未结合在所述表达式的求值的时间,并因此将被分配到{FOO,酒吧}。
也许这是你的意思:
myfun({foo, Bar } = Var) ->
otherfunction(Var, stuff).
通过这种方式,您可以将功能导出为myfun/1(一个参数)。它只会在具有两个元素的元组上匹配。第一个必须是“富”原子,而第二个可以是任何东西。在所有其他情况下,您将得到一个函数子句,除非您为该函数指定了不同的子句。例如,它是有道理的有:
myfun({foo, Bar } = Var) ->
otherfunction(Var, stuff);
myfun(Var) ->
{error, bad_format}.
我不完全确定这就是你问的,但。请让我知道这是否有帮助。
如果我有这个正确的,你想要的是设置Var
,只包含一个匹配的{ foo, Bar }
,而不需要做任何额外的检查,为简洁起见。 据我所见,你不能在Erlang做到这一点。抱歉。 :)
你错了:再次检查你的答案。 – jldupont 2009-11-04 23:42:02
这是不正确的。正如其他两个职位表明你确实可以做他在问什么。 – 2009-11-05 02:21:38
您能否重新说明您的问题?这不是真的清楚我... – 2009-11-04 23:29:39
好吧,也许我应该收回它,你没有回答这个问题对我来说,功=部分是什么,我一直在寻找。事后看来,RTFM应该是正确的答案。 – ptriller 2009-11-04 23:48:07