作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在文件 ~/.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/
我是一名优秀的程序员,十分优秀!