Ruby继承nil类

Mic*_*wen -1 ruby

我正在尝试制作一个游戏,但是我在设置属性的默认值并为每个子类设置不同的默认值时遇到问题.

这是问题所在:

class Player
   attr_accessor :hp 
   @hp = 2
end

class Harper < Player
  @hp = 5
end

bill = Harper.new.hp #=>nil
Run Code Online (Sandbox Code Playgroud)

我期待它Harper.new.hp,5但它显示为nil,我不明白为什么.

Fra*_*oto 5

初始化的问题是它存在于类级别.也就是说,您正在创建一个类实例变量(令人困惑?)而不是您期望的对象实例变量.

要创建实例变量,您需要在实例级别运行的方法中执行此操作,例如在使用"new"方法创建对象时运行的initialize方法.

例:

class Hello
  @world = "World!"
  def initialize
    @to_be_or_not_to_be = "be!"
  end
end
=> :initialize

inst = Hello.new
inst.instance_variables
=> [:@to_be_or_not_to_be]

Hello.instance_variables
=> [:@world]

inst.class.instance_variables
=> [:@world]
Run Code Online (Sandbox Code Playgroud)