gpt4 book ai didi

erlang - 如何使用变量调用 Erlang 函数?

转载 作者:行者123 更新时间:2023-12-01 07:13:23 25 4
gpt4 key购买 nike

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 程序员——我看到他在 session 上发表了一些主题演讲或其他任何内容(我在网上看到了)。

这种事情过去有用但现在不行了吗?当然,有一种方法可以让我做我想做的事——调用这些函数而不需要所有的冗长和样板。

编辑:如果我正确阅读了文档,这似乎暗示我在顶部的示例应该可以工作(第 8.6 节) http://erlang.org/doc/reference_manual/expressions.html

最佳答案

I know abs is an atom, not a function. [...] Why does it work when the module name is used?



The documentation解释说(稍微重组):

ExprM:ExprF(Expr1,...,ExprN)

each of ExprM and ExprF must be an atom or an expression that evaluates to an atom. The function is said to be called by using the fully qualified function name.

ExprF(Expr1,...,ExprN)

ExprF must be an atom or evaluate to a fun. If ExprF is an atom the function is said to be called by using the implicitly qualified function name.


  • 当使用完全限定的函数名时,Erlang 期望计算结果为 的原子或表达式。原子 .换句话说,你必须绑定(bind) X到一个原子:X = atom.这正是您提供的。
  • 但在第二种形式中,Erlang 需要一个原子或一个计算结果为 的表达式。功能 .注意最后一句话。也就是说,如果不使用全限定函数名,则必须绑定(bind)X到一个函数:X = fun module:function/arity.
  • 关于erlang - 如何使用变量调用 Erlang 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30958983/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com