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

Ruby不同类间传递变量始终返回nil的问题如何解决?

问题修复说明

错误根因

  • 你在Changer的change方法中没有使用传入的input参数,而是读取了当前Changer实例自身的@input实例变量。新创建的Changer实例从未执行过输入赋值逻辑,该变量自然为nil。
  • 不必要的继承逻辑加剧了实例变量的混淆,Input类和Changer类不存在必须继承的复用场景,属于错误的类设计。
  • Input类的初始化方法存在无效赋值:@input = input执行时还未对input赋值,初始化阶段@input会被设为nil,该问题会被后续get_input的赋值覆盖,不影响主逻辑。

修复方案

直接去掉Changer的继承逻辑,在change方法中使用传入的用户输入参数即可,修复后代码如下:

class Input
  attr_accessor :input

  def call
    get_input
    output
  end

  def get_input
    puts "please write a number"
    @input = gets.chomp.to_s
  end

  def output
    p Changer.new.change(@input)
  end
end

class Changer
  def change(input)
    if input == "one"
      "1"
    elsif input == "two"
      "2"
    elsif input == nil
      "it's nil"
    else
      "something else"
    end
  end
end

Input.new.call

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:24:03