Erlang Spawn由于某种原因返回undef

时间:2019-12-01 01:26:28

标签: erlang

当使用100个传感器运行时,我得到了Erlang的响应,所有进程都返回

的某个版本

进程<0.124.0>中的错误,具有退出值: {undef,[{main,watcher_start,[10,0],[]}]}

我不确定自己在做什么错。

这是main.erl

PassthroughSubject

和watcher.erl

@Published

我在做什么错?我已经导入了watcher_run / 2,应该向它发送2个参数。

1 个答案:

答案 0 :(得分:5)

这是import的定义:

  

-导入(模块,函数)。

     

导入的功能。可以和本地函数一样调用,   也就是说,没有任何模块前缀。

     

模块是原子,它指定要从中导入功能的模块。   函数是类似于导出的列表。

此行:

spawn(?MODULE, watcher_start, [SenN, SID]);

出现在模块main中,因此宏?MODULEmain取代。结果,您要求erlang生成执行main:watcher_start(SenN, SID)的进程。但是,watcher_start/2未在main模块中定义,而是在watcher模块中定义的。换句话说,当您将功能导入模块时,并不意味着您可以将该功能视为模块的一部分。

解决方法是致电:

spawn(watcher, watcher_start, [SenN, SID]);

或者因为您正在导入watcher_start/2,所以可以省略模块名称并调用:

   spawn(
         fun() -> watcher_start(SenN, SID) end
   ).

此行有相同的问题:

spawn(?MODULE, watcher_start, [10, SID]),

导入模块可以节省一些键入内容,但这是以代码清晰为代价的。您可能会考虑不要在代码中使用导入。