似乎:
- Dialyzer和erlc当源文件中有一个用户定义的属性在
-module
之前时都出错
Shell会话演示:
~ cat sample.erl
-my_attr(my_value).
-module(sample).
-compile([export_all, nowarn_export_all]).
main(_) ->
ok.
~ erlc sample.erl
sample.erl:1:2: no module definition
% 1| -my_attr(my_value).
% | ^
~ dialyzer sample.erl
Checking whether the PLT /Users/mheiber/Library/Caches/erlang/.dialyzer_plt is up-to-date... yes
Proceeding with analysis...
dialyzer: Analysis failed with error:
Could not scan the following file(s):
/Users/mheiber/sample.erl:1:2: no module definition
Last messages in the log cache:
Reading files and computing callgraph...
用户自定义属性的顺序契约是否记录在任何地方?还是这是个bug?
我能在文档中找到的是预定义的属性必须在函数声明之前出现:
https://www.erlang.org/doc/reference_manual/modules.html pre-defined-module-attributes
-module(Module).
模块声明,定义模块的名称。Module这个名字,一个原子等于文件名减去扩展名。erl。否则,代码加载将无法正常工作。
此属性首先指定并且是唯一的强制属性。