gpt4 book ai didi

Elixir:__using__/1 未定义或私有(private)

转载 作者:行者123 更新时间:2023-12-04 15:18:20 25 4
gpt4 key购买 nike

我正在使用 Elixir + Phoenix 1.3 并定义了 Accounts语境。我想使用 accounts.ex文件作为索引在其他模块中要求以防止它变得太大,但我无法从我创建的其他模块导入函数。

我的文件结构如下:

lib
|- Project
|- Accounts
|- accounts.ex
|- user_api.ex

这就是我的 accounts.ex文件看起来:
# accounts.ex

defmodule Project.Accounts do
@moduledoc """
The Accounts context.
"""
import Ev2Web
import Ecto.Query, warn: false
alias Project.{Accounts}

use Accounts.UserAPI


end

这是我要导入的模块:
# user_api.ex

defmodule Project.Accounts.UserAPI do

alias Project.{Repo}
alias Project.{Accounts.User}

def list_users do
Repo.all(User)
end
end

我希望能够导入我的 Project.Accounts.UserAPI模块,以便我可以引用 Project.Accounts.list_users()在我的 Controller 中,但没有导入模块。我收到错误 function Project.Accounts.UserAPI.__using__/1 is undefined or private .

我的 Controller 如下所示:
defmodule ProjectWeb.UserController do
use ProjectWeb, :controller

alias Project.Accounts

def index(conn, _params) do
users = Accounts.list_users()
render(conn, "index.html", users: users)
end
end

有谁知道如何将一个模块中的所有功能导入另一个模块以便它们可以使用?提前致谢!

最佳答案

您必须包含 __using__宏并将所有应该编译的代码放入 using 模块中。像这样:

defmodule Project.Accounts.UserAPI do

defmacro __using__(_) do
quote do
alias Project.{Repo}
alias Project.{Accounts.User}

def list_users do
Repo.all(User)
end
end
end
end

关于Elixir:__using__/1 未定义或私有(private),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47161788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com