在Ruby

时间:2015-12-08 12:56:28

标签: ruby

我试图弄清楚如何在Ruby中的类之间传递变量。我现在正在研究的一个例子是游戏,玩家的健康,装备等不断变化,并且从一个场景传递到另一个场景,直到游戏结束。以下是我到目前为止的情况:

class Player
  def enter()
  end
end

class MyPlayer < Player
  def initialize()
    dog_biscuits = false
  end
end

class Scene
  def enter()
  end
end

class Entrance < Scene
  def enter(player)
    puts "You are in the entrance"
    if player.dog_biscuits == false
      puts "You don't have any biscuits."
    end
  end
end

player = MyPlayer.new
entrance = Entrance.new
entrance.enter(player)

每当我运行此命令时,都会收到以下错误消息:

entrance.rb:20:in `enter': undefined method `dog_biscuits' for #<MyPlayer:0x007fbfe2167f20> (NoMethodError)

我在OSX El Capitan上运行ruby 2.2.3p173。

2 个答案:

答案 0 :(得分:0)

这样做:

class MyPlayer < Player
  attr_accessor :dog_biscuits
  def initialize()
    @dog_biscuits = false
  end
end

使用attr_accessor将允许您设置和获取实例变量。还要记住,您必须使用@为实例变量添加前缀。

答案 1 :(得分:0)

class MyPlayer < Player

  def initialize()
    @dog_biscuits = false
  end

  def has_no_dog_biscuits?
    @dog_biscuits == false
  end
end

最好创建方法has_no_dog_biscuits?然后拥有attr_reader并将属性暴露给外部世界,这样,你总是可以检查玩家是否没有dog_biscuits。