Erlang 为什么spawn()声称我的函数不存在?
我正在阅读这本书,代码如下:Erlang 为什么spawn()声称我的函数不存在?,erlang,Erlang,我正在阅读这本书,代码如下: -module(fridge). %% API -export([start/1]). start(FoodList) -> spawn(?MODULE, fridge2, [FoodList]). fridge2(FoodList) -> receive {From, {store, _Food}} -> From ! {self(), ok}, fridge2([_Food|FoodList]);
-module(fridge).
%% API
-export([start/1]).
start(FoodList) -> spawn(?MODULE, fridge2, [FoodList]).
fridge2(FoodList) ->
receive
{From, {store, _Food}} ->
From ! {self(), ok},
fridge2([_Food|FoodList]);
{From, {take, Food}} ->
case lists:member(Food, FoodList) of
true ->
From ! {self(), {ok, Food}},
fridge2(lists:delete(Food, FoodList));
false ->
From ! {self(), not_found},
fridge2(FoodList)
end;
{terminate} ->
ok
end.
但是,当我尝试调用我的start()
函数时,出现以下错误:
36> c(fridge).
fridge.erl:8: Warning: function fridge2/1 is unused
{ok,fridge}
37> fridge:start([]).
<0.111.0>
=ERROR REPORT==== 10-Mar-2016::22:02:42 ===
Error in process <0.111.0> with exit value:
{undef,[{fridge,fridge2,[[]],[]}]}
36>c(冰箱)。
冰箱。erl:8:警告:功能冰箱2/1未使用
{好的,冰箱}
37>冰箱:启动([])。
=错误报告===2016年3月10日::22:02:42===
使用退出值处理时出错:
{undf,[{冰箱,冰箱2,[[]],[]}}
我做错了什么,为什么它说函数不存在呢?spawn(模块、函数、参数)->pid()
将Module:Function应用程序启动的新进程的pid返回给Args
因此,您必须将函数fridge2/1像start/1一样导出为api
或者我们这样写:start(FoodList)->spawn(fun()->fridge2(FoodList)end)。
Ah非常有意义!我猜这个例子之所以奏效,是因为导出了所有的内容,尽管他们甚至说你应该只导出你需要的内容:)。lambda的好主意,也很有帮助。