Elixir中的双下划线功能

sha*_*evy 9 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),
Run Code Online (Sandbox Code Playgroud)

什么是合格的__functions__,有双重下划线?

ps:在jose的回答之后将'methods'重命名为'functions'.方法是一个oop术语,在这里不合适.

Jos*_*lim 15

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

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