【问题标题】:how do you call a class variable from another class in ruby你如何从ruby中的另一个类调用一个类变量
【发布时间】:2021-11-07 02:23:18
【问题描述】:

我想将一个类(Paper)名称与不同类中的另一个类(Rock)名称进行比较。

换句话说,如何通过将对象作为参数传递来调用 Rock 对象中的 Paper 对象变量?

这是我的代码,Rock 类下的 if 语句有问题。

class Element
    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)
        if @name == @@ob1
            return "do something"
        end 

        return "help"
    end
end

class Paper < Element 
    def compare_to(var)
    end
end

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

puts rock.compare_to(paper)

【问题讨论】:

  • 你的问题很不清楚。 “调用类变量”是什么意思?您不能“调用”变量。在 Ruby 中唯一可以调用的是方法。即使这并不完全正确,您也只能发送一条消息,运行时可能会或可能不会调用方法作为响应。此外,您永远不会显示类变量是如何初始化的,也永远不会显示它属于哪个类。另外,您只说有问题,但没有说问题是什么。你有错误吗?错误是什么?你得到错误的结果吗?什么是错误的结果,什么是正确的
  • … 结果?行为不是您所期望的吗?您期望的行为是什么,而您观察到的行为是什么? idownvotedbecau.se/itsnotworkingidownvotedbecau.se/noexceptiondetails
  • 创建Rock.new('Paper')Paper.new('Scissors') 的可能性可能表明某些事情不太正确。
  • 你永远不会为你的类变量@@ob1赋值。那么@name == @@ob1 的意义何在?

标签: ruby class inheritance instance


【解决方案1】:

你可以通过调用你用attr_accessor :name生成的getter方法来读取另一个对象的instance变量@name(它不是一个类变量)(请注意有一个@在您的示例中,该行中缺少 987654323@)。

只需将子模型中的 compare_to 更改为:

def compare_to(ob1)
  if @name == ob1.name
    return "do something"
  end 

  return "help"
end

【讨论】:

    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 2014-03-15
    • 2013-01-26
    • 2013-12-01
    相关资源
    最近更新 更多