Ruby中能否将类实例赋值给另一类属性?代码报错求助
问题分析与解决
首先明确:将一个类的实例赋值给另一个类的属性是完全可行的,你遇到的错误是代码本身的参数传递问题,和这种赋值方式无关。
你的代码存在以下几个问题:
- 两个类的
initialize方法都没有定义参数,但你调用new时传入了参数(比如Test1.new(1, 2)),Ruby会判定参数数量不匹配,抛出ArgumentError。 - 代码里的
temp变量从未定义,执行number.number2 = temp时会触发NameError。 - 就算
temp存在,你要输出的是number的number2属性(也就是Test1实例)的num2值,不需要额外的temp变量。
修正后的代码
class Test1 attr_accessor :num1, :num2 # 给initialize添加参数,接收传入的值 def initialize(num1, num2) @num1 = num1 @num2 = num2 end end class Test2 attr_accessor :number1, :number2 # 同样给initialize添加参数 def initialize(number1, number2) @number1 = number1 @number2 = number2 end end # 现在调用new时传参就不会报错了 num = Test1.new(1, 2) number = Test2.new(11, num) # 直接访问number的number2属性并输出其num2值 puts number.number2.num2
运行这段代码会输出2,完美实现了把Test1的实例赋值给Test2的number2属性,并且能正常访问该实例的属性。
内容的提问来源于stack exchange,提问作者Trung Kien Nguyen
相关产品推荐
相关产品推荐

