2016-08-13 66 views
0

如何創建仙丹一個mixin? - 一個包含函數的實體,我可以將其包含在模塊中並使用這些函數。紅寶石混入在藥劑

什麼是Ruby的藥劑中混入的相同呢?

+2

你的問題是什麼?我無法理解 – coderVishal

+0

我不知道你問了什麼,但也許這會有所幫助 - > http://elixir-lang.org/getting-started/alias-require-and-import.html – JustMichael

+0

@coderVishal,如何創建一個混蛋。 – Johshi

回答

1

你不能。 Mixin是一個對象概念,Elixir中沒有任何對象。

如果你只是想爲功能短名稱,你可以使用import,讓您可以參考函數W/O使用完整的模塊名稱。

http://elixir-lang.org/getting-started/alias-require-and-import.html

另外還有一點,你可以用它來注入來自另一模塊代碼到當前模塊中使用宏。這可能是最接近Ruby Mixin的東西。見

http://elixir-lang.org/getting-started/meta/domain-specific-languages.html

對於如何使用__using__宏的例子。

此外,還有用於功能多態性行爲和協議。

行爲是當你想要一個自定義函數在相同的參數,協議是當你想要相同的功能在不同的數據 類型工作。

2

這裏是__using__宏的動作一個例子:如果你使用鳳凰

# mixin.ex 
defmodule Mixin do 
    defmacro __using__(_) do 
    quote do 
     def hello do 
     IO.puts "Hello World" 
     end 
    end 
    end 
end 

defmodule MyModule do 
    use Mixin 
end 

Interactive Elixir (1.4.2) - press Ctrl+C to exit (type h() ENTER for help) 
iex(1)> c "mixin.ex" 
[MyModule, Mixin] 
iex(2)> MyModule.hello() 
Hello World 
:ok 
iex(3)> 

,你可以在你web/web.ex文件中添加了高清的報價定義爲內要擴展特定組件。例如,我會經常爲我的模型添加一個all()函數。

# web/web.ex 
def MyApp.Web do 
    def model do 
    quote do 
     use Ecto.Schema 

     import Ecto 
     import Ecto.Changeset 
     import Ecto.Query 

     def all, do: Repo.all(__MODULE__) 
    end 
    end 
    # ... 
end 

請注意,我們不會在Elixir中將它們稱爲mixin。