我试图弄清楚如何在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。
答案 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。