我处于这样一种情况,我只能创建分配给变量的匿名函数,如下所示:
Foo = fun(X) -> X end.
我知道如果你在一个模块中,你可以做这样的事情:
foo(X) -> X. foo(X, Y) -> X + Y. % i.e. foo(3) = 3, foo(3,4) = 7
我的问题是:这可以通过匿名函数实现吗?
一篇博文(我现在已经遗憾了)让我觉得你可以这样做:
Foo = fun(X) -> X; (X, Y) -> X + Y end.
但这不起作用,因为我遇到"头部不匹配"错误.
简单而正确的答案是否定的,你做不到.当你这样做时,这实际上是非常符合逻辑的
foo(X) -> X. foo(X, Y) -> X + Y.
你实际上是在创建两个函数:foo/1
一个参数的函数; 并且foo/2
,另一个函数,它有两个参数.他们不一样foo
.这直接映射到匿名函数(funs
),因此您需要创建两个不同的函数,一个参数和两个参数中的另一个.
"头部不匹配"错误正在抱怨不同数量的参数.