Erlang模块中定制属性的位置要求是什么?

plupiseo  于 2022-12-16  发布在  Erlang
关注(0)|答案(1)|浏览(174)

看来:

  • 当源文件中-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

up9lanfz

up9lanfz1#

  • 模块(模块)。
    模块声明,定义模块的名称。名称Module是一个原子,应该与文件名减去扩展名. erl相同。否则代码加载不会按预期工作。

此属性将首先指定并且是唯一的强制属性。

相关问题