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

Ruby运行报undefined method `call' for nil:NilClass错误求解

报错原因

报错本质是方法调用写法存在逻辑问题,代码执行流程分为两步:

  • 第一步执行test(:tester):你传入的参数是符号:tester,Ruby中除了nil和false外所有值均为真值,因此命中if分支打印yes。注意Ruby方法默认返回最后一条执行语句的返回值,这里if分支最后执行的是puts "yes",而puts方法的固定返回值是nil。
  • 第二步你在test(:tester)的返回值后追加了.("hello world"),这个语法是Ruby中调用call方法的简写,等价于test(:tester).call("hello world")。但第一步拿到的返回值是nil,nil属于NilClass类,该类没有定义call实例方法,因此抛出你看到的NoMethodError。
修正方式

如果只是想正常调用test方法,删掉调用语句后面多余的.("hello world")即可,直接写:

test(:tester)

如果你本意是让test方法返回一个可调用的Proc/Lambda对象,需要修改方法逻辑,让分支最终返回支持call调用的对象,示例:

def test(tester)
    if tester
        puts "yes"
        ->(msg) { puts msg } # 返回Lambda对象,支持call调用
    else
        puts "error"
    end
end

# 此时调用不会报错
test(:tester).("hello world")

运行上述修正后的代码会依次输出:

yes
hello world

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 06:03:20