Elixir中的双下划线功能

时间:2015-05-19 18:09:36

标签: elixir

有一些双下划线函数,如__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术语,在这里不合适。

1 个答案:

答案 0 :(得分:15)

双分数函数用作回调(__before_compile__等)或元数据(__info__等)。目标是他们不应该污染您的模块API。也不会自动导入以下划线开头的函数(这就是我们想要的)。

PS:它们是功能,而不是方法。 :)