有一些双下划线函数,如__before_compile__
,它们在Elixir的编译时自动调用。但是,我也看到了一些双重下划线__functions__
似乎没有神奇的要求。例如,在Ecto中,以下函数称为
Ecto.Schema.__source__(source),
Ecto.Schema.__fields__(fields),
Ecto.Schema.__assocs__(assocs),
Ecto.Schema.__primary_key__(primary_key_field),
这些__functions__
有什么资格才能获得双重下划线?
ps:重命名'方法'到'功能'在jose的回答之后。方法是一个oop术语,在这里不合适。
答案 0 :(得分:15)
双分数函数用作回调(__before_compile__
等)或元数据(__info__
等)。目标是他们不应该污染您的模块API。也不会自动导入以下划线开头的函数(这就是我们想要的)。
PS:它们是功能,而不是方法。 :)