当使用100个传感器运行时,我得到了Erlang的响应,所有进程都返回
的某个版本进程<0.124.0>中的错误,具有退出值: {undef,[{main,watcher_start,[10,0],[]}]}
我不确定自己在做什么错。
这是main.erl
PassthroughSubject
和watcher.erl
@Published
我在做什么错?我已经导入了watcher_run / 2,应该向它发送2个参数。
答案 0 :(得分:5)
这是import的定义:
-导入(模块,函数)。
导入的功能。可以和本地函数一样调用, 也就是说,没有任何模块前缀。
模块是原子,它指定要从中导入功能的模块。 函数是类似于导出的列表。
此行:
spawn(?MODULE, watcher_start, [SenN, SID]);
出现在模块main
中,因此宏?MODULE
被main
取代。结果,您要求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]),
导入模块可以节省一些键入内容,但这是以代码清晰为代价的。您可能会考虑不要在代码中使用导入。