2017-03-06 29 views
0

匹配具有相同名稱的功能,我想延長閃存的消息類型,但我得到的錯誤,當我做到以下幾點:模式在不同的模塊

defmodule Backend.AuthView do 
    use Backend.Web, :view 

    def flash(message, :auth_info) do 
    ... 
    end 
    def flash(message, :auth_notice) do 
    ... 
    end 
end 

,並導入到另一個模塊是:

defmodule Backend.LayoutView do 
    use Backend.Web, :view 
    import Backend.AuthView 

    def flashes(conn) do 
    markup safe: true do 
     messages = Enum.reduce [:notice, :error], [], fn(which, acc) -> 
     case get_flash(conn, which) do 
      nil -> acc 
      _ -> acC++ [{ which, get_flash(conn, which)}] 
     end 
     end 
     if messages != [] do 
     Enum.map messages, fn({which, message}) -> 
      flash message, which 
     end 
     end 
    end 
    end 
    def flash(message, :info) do 
    ... 
    end 
    def flash(message, :notice) do 
    ... 
    end 
end 

有沒有可能讓這樣的事情發生?

回答

0

你可以導入更改爲別名,並實現回退功能,像這樣

defmodule Backend.LayoutView do 
    use Backend.Web, :view 
    alias Backend.AuthView 

    def flash(message, :info) do 
    ... 
    end 

    def flash(message, :notice) do 
    ... 
    end 

    def flash(message, other) when is_atom(other) do 
    AuthView.flash(message, other) 
    end 
end 
+0

我希望我只需要添加一行到LayoutView,但這是完全可以接受的。謝謝。 – raarts