You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入无参函数后调用失败:为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:32:04