看来:
- 当源文件中
-module
之前存在用户定义属性时,透析器和erlc均出错
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
1条答案
按热度按时间up9lanfz1#
模块声明,定义模块的名称。名称Module是一个原子,应该与文件名减去扩展名. erl相同。否则代码加载不会按预期工作。
此属性将首先指定并且是唯一的强制属性。