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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:30:51