2016-03-26 161 views
1

因此,我已經混合項目,模塊Uploader.Server和模塊Uploader.UtilityElixir:從另一個模塊快捷方式訪問方法/宏

Uploader.Utility定義爲request宏。問題是,我無法在Uploader.Server中這樣訪問它,因爲服務器模塊提供了外殼接口,因此我只能調用Uploader.Utility.request,這很不方便,而且request將成爲命令的常見參數。

我可以把這個宏放在Uploader.Server模塊中,但是邏輯上它不屬於那個模塊。

我可以以某種方式提供對宏的訪問嗎Uploader.Server只是通過內部名稱,而不是外部,像別名?

回答

2

您正在尋找Kernel.SpecialForms.import/2

實施例:

defmodule Uploader.Utility do 
    defmacro request(name) do 
    quote do 
     def unquote(name)(), do: :ok 
    end 
    end 
end 

defmodule Uploader.Server do 
    require Uploader.Utility 
    import Uploader.Utility, only: [request: 1] 

    request(:hello) 
end 

IO.inspect Uploader.Server.hello 

打印

:ok