Erlang:从函数返回函数

sud*_*udo 3 erlang

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

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

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

bagel() ->
    test.

run() ->
    (bagel())().
Run Code Online (Sandbox Code Playgroud)

结果:

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> 
Run Code Online (Sandbox Code Playgroud)

sud*_*udo 5

啊,我们开始:

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

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

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

run() ->
    (bagel())().
Run Code Online (Sandbox Code Playgroud)

我在这里寻找答案,但他们没有明确说明,但是顶部附近的示例给了我提示。

  • 这让我微笑-您找到了自己的答案,现在您将永远不会忘记它。请记住,虽然功能* label *是原子,但完整的功能标识是其标签/奇偶校验。 (2认同)