在Phoenix Framework上放置辅助模块的位置

ard*_*ama 6 elixir phoenix-framework

我想添加一个帮助程序模块来执行get请求

http://hexdocs.pm/httpoison/HTTPoison.Base.html

但是当我把它放进去defmodule的时候

/lib/Shopper/CallApi.ex

use

/web.ex

def controller do
quote do
  use Phoenix.Controller

  alias Shopper.Repo
  import Ecto.Model
  import Ecto.Query, only: [from: 1, from: 2]

  import Shopper.Router.Helpers

  use Shopper.CallApi
end
Run Code Online (Sandbox Code Playgroud)

结束

编译器失败了

== Compilation error on file web/controllers/page_controller.ex ==
** (UndefinedFunctionError) undefined function: Shopper.CallApi.__using__/1
    Shopper.CallApi.__using__([])
    web/controllers/page_controller.ex:2: (module)
Run Code Online (Sandbox Code Playgroud)

那么......在哪里定义CallApi.ex以及我应该在哪里声明它?

Gaz*_*ler 5

当你调用时use Shopper.CallApi,__using__/1宏被调用 - 这是元编程特有的.如果要使用Shopper.CallApi模块中定义的函数,请alias Shopper.CallApi改用.

之间的差异alias,requireimport在形成文件的别名,需要和导入using在形成文件的域专用语言.

顺便说一句,通常在elixir项目中,文件以snake_case命名 - call_api.ex而不是CallApi.ex.