2015-05-19 54 views
7

有一些雙下劃線函數,如​​,它們在Elixir的編譯時自動調用。不過,我也看到一些雙下劃線__functions__,似乎沒有神奇的要求命名。對於例如,在外生,下面的函數被稱爲Elixir中的雙下劃線函數

Ecto.Schema.__source__(source), 
    Ecto.Schema.__fields__(fields), 
    Ecto.Schema.__assocs__(assocs), 
    Ecto.Schema.__primary_key__(primary_key_field), 

什麼資格這些__functions__有,好,雙下劃線?

ps:在jose的回答後將'methods'重命名爲'functions'。方法是一個術語,在這裏不合適。

回答

13

雙重分數函數用作回調函數(​​等)或元數據(__info__等)。目標是他們不應該污染你的模塊API。還有以下劃線開頭的函數不會自動導入(這是我們在這裏要做的)。

PS:它們是函數而不是方法。 :)