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

编译时未检测到大小写错误的模块名,运行时触发UndefinedFunctionError

Elixir运行时UndefinedFunctionError问题排查

问题代码

def ping(servoId) do
  Utilities.check_integer!(servoId,0,1,Error.const_error_servo_id())
  Genserver.call(@name,{:ping,servoId})
end

运行时报错信息

iex(3)> Mechanics.Servo.ping(1)

03:41:01.629 [error] 加载 /Users/yuchen/homebrew/Cellar/elixir/1.13.4/bin/../lib/elixir/ebin/Elixir.Genserver.beam 失败: :badfile


03:41:01.629 [error] beam/beam_load.c(158): 加载模块 'Elixir.Genserver' 出错:
  目标代码中的模块名为 'Elixir.GenServer'


** (UndefinedFunctionError) 函数 Genserver.call/2 未定义(模块 Genserver 不可用)
    Genserver.call(Mechanics.Servo, {:ping, 1})

问题原因

Elixir是大小写敏感语言,官方进程通信模块的正确名称是GenServer(第二个字母S大写),但你代码里写成了小写s的Genserver,导致运行时找不到对应模块。

编译器未报错是因为Elixir允许引用尚未定义的模块(视为运行时动态加载模块),但实际运行时系统中不存在Genserver这个模块,因此抛出UndefinedFunctionError。

解决方法

修正模块名拼写,将Genserver.call改为GenServer.call即可:

def ping(servoId) do
  Utilities.check_integer!(servoId,0,1,Error.const_error_servo_id())
  GenServer.call(@name,{:ping,servoId})
end

内容的提问来源于stack exchange,提问作者Chen Yu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:54:27