导入无参函数后调用失败:为何ff无法被调用?
Elixir导入模块后调用无参函数报错:未定义变量"ff"
问题代码
defmodule F do def ff do IO.puts(123) end end defmodule G do import F def g do ff end end G.g()
报错信息
错误:未定义变量 "ff"
问题
在上述Elixir代码中,已在模块G内导入模块F,为何调用无参函数ff时提示未定义变量,无法正常调用?
解答
这是因为Elixir的语法规则:无参函数的调用必须加上括号。你当前写的ff会被编译器解释成变量名,而非函数调用——哪怕已经导入了模块中的函数,这个规则也不会例外。
只需把ff改成ff()就能正常运行,修改后的代码如下:
defmodule F do def ff do IO.puts(123) end end defmodule G do import F def g do ff() end end G.g()
运行这段代码后,控制台会正常输出123。
内容的提问来源于stack exchange,提问作者mq7
相关产品推荐
相关产品推荐

