关于erlang中回调函数的有关问题
关于erlang中回调函数的问题
今天在使用lists:map函数时遇到一个问题,传递给map的回调函数,只能使用fun定义的临时函数,否则erlang将报错。
测试代码如下:
结果:
3> test:test().
** exception error: bad function f1
in function lists:map/2 (lists.erl, line 1173)
4> test:test2().
[2,3,4,5]
5> test:test3().
[2,3,4,5]
今天在使用lists:map函数时遇到一个问题,传递给map的回调函数,只能使用fun定义的临时函数,否则erlang将报错。
测试代码如下:
%%test.erl -module(test). -export([test/0, test2/0, test3/0]). f1(X)-> X+1. test() -> _List = lists:map(f1, [1,2,3,4]). test2()-> F = fun(X) -> X+1 end, _List = lists:map(F, [1,2,3,4]). test3()-> List = [1,2,3,4], _List = [f1(X) || X <- List].
结果:
3> test:test().
** exception error: bad function f1
in function lists:map/2 (lists.erl, line 1173)
4> test:test2().
[2,3,4,5]
5> test:test3().
[2,3,4,5]
从执行结果中看到,传递的回调函数为外部函数时,运行时将报"bad function"的错误。可能是我的用法不对,现在的解决办法是使用列表解析,如test3/0函数所示的那样。
那么到底使用外部的函数作为回调函数呢?
- 1楼wangyangkobe2小时前
- lists:map(fun f1/1, [1,2,3,4]).n这样估计就正确了。
- Re: gavinr刚刚
- 回复wangyangkoben刚验证了是这样的,非常感谢