(在红宝石公司工作)
首先,我提前道歉。我不是一个训练有素的程序员,我只是凭借便利和不断变化的世界来实现它。我需要做的是编程,我厌倦了等待别人为我编程。因此,我一路上漏掉了一些基本概念,当我问这些问题时,我有时会因后果而出丑。
假设我想在类中定义一个物种/工作关系。我想定义一个超类“blackant”,并有子类“worker”“fighter”和“queen”
对我来说,直觉上,这看起来像这样:

class BlackAnt
  @legs = 6
end

class Worker < BlackAnt
  @jaws = 'small'
end

但如果我试着
ant1 = Worker.new
puts ant1.legs

我得到一个错误。如果我将Blackant类修改为:
class BlackAnt
  attr_accessor :legs
  @legs = 6
end

ant1.legs返回“nil”
我尝试过这里列出的方法:http://railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/
这允许worker.legs返回'6',但是…唉:
ant1 = Worker.new
Worker.legs => '6'
ant1.legs => 'nil'

据猜测,这些父变量的值不会在每次生成新子变量时初始化。
我觉得自己在这件事上有点傻,而这个回答无疑会让我诅咒我发现咖啡因导致通宵失眠的那一天。我需要做的是安排一些事情,以便我可以创建这样的对象:
ant1 = Worker.new
ant2 = Queen.new
ant3 = Fighter.new

让他们每个人获得适当数量的腿,以及在儿童班中分配的任何特殊特征。worker/queen/fighter分类将由名称空间绑定,以便实际调用为:
ant1 = AntBlack::Worker.new
ant2 = AntRed::Worker.new
ant3 = AntRed::Queen.new

等。
然后,我希望能够使用以下方法检查单个蚂蚁的腿部数量:
ant1.legs #=> 6

我可能会绕着胳膊肘去摸大拇指。如果是这样的话,请随时为实现相同结果的方法提供其他建议,我将非常感谢您的见解。
///updated re:响应///
class AntRed
  attr_accessor :legs
  def initialize
    @legs = 6
  end
end

class Worker < AntRed
  @strength = 1
end

结果:
irb(main):009:0> ant1 = Worker.new
#=> #<Worker:0x87616ac @strength=1>
irb(main):010:0> ant1.legs
#=> nil

最佳答案

定义Blackant类如下:

class BlackAnt
  attr_accessor :legs

  def initialize
    @legs = 6
  end
end

你的工人阶级如下:
class Worker < BlackAnt
  attr_accessor :strength

  def initialize
    super

    @strength = 1
  end
end

当前定义blackant类的方式是,将legs存储为class level instance variable

08-15 14:39