gpt4 book ai didi

elixir - 如何在 iex 主作用域中定义函数?

转载 作者:行者123 更新时间:2023-12-02 22:50:12 24 4
gpt4 key购买 nike

在文件 ~/.iex.exs 中,我有一个定义了多个函数的模块,我想从 iex shell 调用这些函数,而不需要使用模块名称前缀。

使用 import SomeModule 不起作用,我收到错误:module SomeModule 未加载但已定义。发生这种情况是因为您尝试在定义的同一上下文中使用模块。尝试在需要它的上下文之外定义模块。

~/.iex.exs 中是否有某种方法可以做到这一点?

最佳答案

这是 .iex.exs 机制的已知限制。 .iex.exs 文件在与您在 shell 中输入内容相同的上下文中进行计算:基本上,IEx 加载 .iex.exs 就像您在 shell 中键入内容一样在 shell 中输入它。

在 Elixir 中,您无法定义模块并在同一上下文中导入它(例如,您无法在 shell/文件中定义模块并随后导入它),这就是那里发生的情况。

我的建议是:在 .iex.exs 中定义模块,并将其别名(仍在 .iex.exs 中)为一个非常短的名称。例如,在 .iex.exs 中:

defmodule MyModule do
def foo, do: :foo
end

alias MyModule, as: M

然后,在 shell 中:

iex> M.foo
:foo

这不是最佳选择,但现在,这是一个可能的妥协。

关于elixir - 如何在 iex 主作用域中定义函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34182289/

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