Erlang:从函数返回函数

Erlang:从函数返回函数,erlang,Erlang,我知道Erlang支持匿名函数。我的问题是,我能从一个函数返回一个函数,然后从外部调用那个返回的函数吗?如果是,我该怎么做?我知道这在许多语言中都是可能的,比如C和Python。以下是我试图做的,但不起作用: -module(test). -export([run/0]). test() -> io:format("toasters", []). bagel() -> test. run() -> (bagel())(). 结果: Erlang/

我知道Erlang支持匿名函数。我的问题是,我能从一个函数返回一个函数,然后从外部调用那个返回的函数吗?如果是,我该怎么做?我知道这在许多语言中都是可能的,比如C和Python。以下是我试图做的,但不起作用:

-module(test).
-export([run/0]).

test() ->
    io:format("toasters", []).

bagel() ->
    test.

run() ->
    (bagel())().
结果:

Erlang/OTP 17 [erts-6.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V6.2  (abort with ^G)
1> c(test).
test.erl:4: Warning: function test/0 is unused
{ok,test}
2> test:run().
** exception error: bad function test
     in function  test:run/0 (test.erl, line 11)
3> 
啊,来了:

-module(test).
-export([run/0]).

test() ->
    io:format("toasters", []).

bagel() ->
    fun test/0. % <- This is what I needed to change.

run() ->
    (bagel())().
-模块(测试)。
-导出([run/0])。
测试()->
io:格式(“烤面包机”,[])。
百吉饼()->
趣味测试/0.%
(百吉饼)。

我在寻找答案,他们没有明确说明,但上面的例子刚才给了我提示。

这让我笑了——你找到了自己的答案,你永远不会忘记它。请记住,函数标签是一个原子,而完整的函数标识是它的标签/奇偶性。@zxq9实际上我在…之后就忘记了它。。。但现在我永远不会忘记!我忘了在函数之前输入
fun
,我想知道为什么会出现
badarith
错误;我在分裂一个原子!