同一文件中导入Elixir模块失败,正确实现方式是什么?
问题分析与解决
你的代码问题不是import Test的写法错误,而是函数调用的语法歧义导致运行失败。
Elixir中,当把函数调用作为另一个函数的参数时,必须用括号明确包裹参数列表,否则解释器会错误解析参数个数。你的代码里IO.puts f :a, 3会被解析为IO.puts(f(:a), 3),但IO.puts/1只接受一个参数,因此触发错误。
修正后的代码
defmodule Test do def f(:a, x), do: x + 1 def f(:b, x), do: x - 1 end import Test IO.puts(f(:a, 3)) IO.puts(f(:b, 3))
补充说明
- 同一文件内定义的模块,直接使用
import 模块名是完全合法的,不需要额外处理。 - 也可以省略
import Test,直接用模块名调用函数:IO.puts(Test.f(:a, 3)),这种写法更清晰,大型项目中更推荐使用。
内容的提问来源于stack exchange,提问作者lyl
相关产品推荐
相关产品推荐

