【发布时间】:2015-06-22 07:19:52
【问题描述】:
4> abs(1).
1
5> X = abs.
abs
6> X(1).
** exception error: bad function abs
7> erlang:X(1).
1
8>
当我调用带有变量的函数时,是否有任何特殊原因必须使用模块名称?这对我不起作用,因为,一方面,它只是太多的语法垃圾,让我的眼睛流血。另一方面,我计划从列表中调用函数,例如(在我脑海中):
[X(1) || X <- [abs, f1, f2, f3...]].
尝试在此处添加各种模块名称会使冗长程度达到顶峰,而我所做的全部目的是减少冗长程度。
编辑:看这里:http://www.erlangpatterns.org/chain.html 这家伙做了一些管道转发功能。他以我想要的方式调用函数,但是当我尝试使用它时,他的代码不起作用。但据我所知,这家伙是一位经验丰富的 Erlang 程序员——我看到他在会议上发表了一些主题演讲或其他什么(我在网上看到的)。
这种事情过去有用但现在不行了吗?当然有一种方法可以让我做我想做的事 - 调用这些函数而不需要所有的冗长和样板。
编辑:如果我正确阅读了文档,这似乎意味着我在顶部的示例应该有效(第 8.6 节)http://erlang.org/doc/reference_manual/expressions.html
【问题讨论】:
-
X = abs, X(1).不起作用,因为 Erlang 不认为绑定到变量的原子是函数。不过,X = erlang, Y = abs, X:Y(1).应该可以工作。分隔两部分的冒号告诉 Erlang 这是一个函数。
标签: erlang