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

Ruby中如何在一个类中调用另一个类的变量并实现实例属性对比

问题修复方案

核心错误点

  • 第一处:Element类的属性定义语法错误,attr_accessor后接的属性名必须是符号,你漏了前缀冒号
  • 第二处:Rock类的compare_to方法中误用了类变量标识符@@,你传入的ob1是方法局部参数,要取它的name属性直接调用ob1.name即可,@@是用来调用类变量的,完全不符合当前场景。

修正后的完整代码

class Element
    # 修正attr_accessor的语法,属性名加冒号转为符号
    attr_accessor :name

    def initialize(name)
        @name = name
    end

    def compare_to(name)
        fail "This method should be overridden"
    end
end

class Rock < Element 
    def compare_to(ob1)
        # 直接通过参数ob1调用它的name属性,和当前实例的@name对比
        if @name == ob1.name
            return "do something"
        end 

        return "help"
    end
end

class Paper < Element 
    def compare_to(var)
        # 这里逻辑和Rock类同理,要取传入对象的name就用var.name
    end
end

rock = Rock.new('Rock')
paper = Paper.new('Paper')

puts rock.compare_to(paper)

运行说明

你调用rock.compare_to(paper)时,paper实例会作为参数传递给ob1,在Rock实例的方法内部,通过ob1.name就能直接访问到paper实例的name属性,完成跨实例的属性对比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:36:01