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
相关产品推荐
相关产品推荐

