Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 代码。是否已加载?in.iex.exs_Elixir_Elixir Iex - Fatal编程技术网

Elixir 代码。是否已加载?in.iex.exs

Elixir 代码。是否已加载?in.iex.exs,elixir,elixir-iex,Elixir,Elixir Iex,我的elixir控制台配置存储在.iex.exs中: if Code.ensure_loaded?(MyApp.Repo) do alias MyApp.Repo end 我希望能够同时运行iex和iex-S mix。如果我在iex上删除条件,则会出现异常 但是这种情况不太好用!即使在iex-S mix上我也有(模块Repo不可用)错误,如果我试图调用Repo.get(…)。因此,我的问题是: 为什么代码。确保\u已加载?在这里不起作用 我怎样才能解决这个问题 这是一个范围界定的问题。在块

我的elixir控制台配置存储在
.iex.exs
中:

if Code.ensure_loaded?(MyApp.Repo) do
  alias MyApp.Repo
end
我希望能够同时运行
iex
iex-S mix
。如果我在
iex
上删除条件,则会出现异常

但是这种情况不太好用!即使在
iex-S mix上
我也有
(模块Repo不可用)
错误,如果我试图调用
Repo.get(…)
。因此,我的问题是:

  • 为什么
    代码。确保\u已加载?
    在这里不起作用
  • 我怎样才能解决这个问题

  • 这是一个范围界定的问题。在块内,定义了以下别名:

    if Code.ensure_loaded?(MyApp.Repo) do
      alias MyApp.Repo
      Repo.get(...) #⇒ available
    end
    
    要定义IEx范围的
    别名
    IEx,应在任何块之外调用它:

    alias MyApp.Repo
    
    如果是代码,则不需要有条件的
    。确保加载?(MyApp.Repo)
    当使用
    IEx-S mix执行
    IEx
    时,将自动加载所有依赖项。对于纯
    iex
    ,这可能会以更麻烦的方式完成:

    defmodule FileExt do
      def ls_all(dir, acc \\ []) do
        case File.ls(dir) do
          {:ok, list} -> list |> Enum.reduce(acc, fn f, acc ->
              fullname = dir <> "/" <> f
              if fullname |> File.dir?, do: ls_all(fullname, acc), else: acc ++ [fullname]
            end)
          {:error, e} ->
            IO.puts "Unable to list. Reason: #{e}"
            acc
        end
      end
    
      def require_lib do
        try do
          "lib" |> FileExt.ls_all |> Kernel.ParallelRequire.files
        rescue
          e in UndefinedFunctionError -> Code.ensure_loaded?(MyApp.Repo)
        end
      end
    end
    
    try do
      MyApp.Repo.get
    rescue
      e in UndefinedFunctionError -> FileExt.require_lib
    end
    
    alias MyApp.Repo
    

    这是一个范围界定的问题。在块内,定义了以下别名:

    if Code.ensure_loaded?(MyApp.Repo) do
      alias MyApp.Repo
      Repo.get(...) #⇒ available
    end
    
    要定义IEx范围的
    别名
    IEx,应在任何块之外调用它:

    alias MyApp.Repo
    
    如果是代码,则不需要有条件的
    。确保加载?(MyApp.Repo)
    当使用
    IEx-S mix执行
    IEx
    时,将自动加载所有依赖项。对于纯
    iex
    ,这可能会以更麻烦的方式完成:

    defmodule FileExt do
      def ls_all(dir, acc \\ []) do
        case File.ls(dir) do
          {:ok, list} -> list |> Enum.reduce(acc, fn f, acc ->
              fullname = dir <> "/" <> f
              if fullname |> File.dir?, do: ls_all(fullname, acc), else: acc ++ [fullname]
            end)
          {:error, e} ->
            IO.puts "Unable to list. Reason: #{e}"
            acc
        end
      end
    
      def require_lib do
        try do
          "lib" |> FileExt.ls_all |> Kernel.ParallelRequire.files
        rescue
          e in UndefinedFunctionError -> Code.ensure_loaded?(MyApp.Repo)
        end
      end
    end
    
    try do
      MyApp.Repo.get
    rescue
      e in UndefinedFunctionError -> FileExt.require_lib
    end
    
    alias MyApp.Repo
    

    (1) 是因为
    别名
    是词法性的,仅在
    if
    中有效。不确定(2)。(1)是因为
    别名是词法性的,并且仅在
    中有效(如果
    )。关于(2)我不确定。我不认为这解决了“我想同时运行
    iex
    iex-S mix
    ”的要求@Dogbert确实,我更新了一个答案,显式加载
    “lib”
    目录。@mudasobwa看起来不错,但我得到了很多警告,比如
    警告:重新定义模块MyApp.module
    。如何解决?您在使用
    FileExt.ls|all |>Kernel.ParallelRequire.files
    iex-S mix
    时收到这些警告,对吗?显然,这是因为
    iex-smix
    负责从
    “lib”
    本身加载所有内容。检查是否预先定义了
    Repo
    ,以区分纯
    iex
    iex-S mix
    之间的行为:
    尝试执行MyApp.Repo.get rescue e in UndefinedFunctionError->LOAD_ALL_THIS_STUFF end
    @mudasobwa我仍然看到这些警告;只需复制粘贴的代码并用我的应用程序名替换
    MyApp
    ,我认为这并不能解决“我希望能够同时运行
    iex
    iex-S mix
    ”的要求@Dogbert确实,我更新了一个答案,以显式加载
    “lib”
    dir.@mudasobwa看起来不错,但我收到了很多警告,类似于
    警告:重新定义模块MyApp.module
    。如何解决?您在使用
    FileExt.ls|all |>Kernel.ParallelRequire.files
    iex-S mix
    时收到这些警告,对吗?显然,这是因为
    iex-smix
    负责从
    “lib”
    本身加载所有内容。检查是否预先定义了
    Repo
    ,以区分纯
    iex
    iex-S mix
    之间的行为:
    尝试执行MyApp.Repo.get rescue e in UndefinedFunctionError->LOAD_ALL_THIS_STUFF end
    @mudasobwa我仍然看到这些警告;只需复制粘贴的代码并用我的应用程序名替换
    MyApp