以下Ruby代码几乎可以正常工作。在Mage和Warrior类中,我给它一个属性toon并想要打印出值,但它给了我这个错误。
C:/rails/11.rb:37:<main>': undefined method
toon&#39; #(NoMethodError)
任何人都知道出了什么问题?
class Party
attr_reader :member
def initialize(occupation)
member = create(occupation)
end
end
class PartyFactory < Party
def create(occupation)
if occupation == :warrior
Warrior.new
elsif occupation == :mage
Mage.new
else
raise "Unknown hero"
end
end
end
class Mage
attr_accessor :toon
def initialize
@toon = "woor"
end
end
class Warrior
attr_accessor :toon
def initialize
@toon = "WAR"
end
end
party = PartyFactory.new(:warrior)
puts party.toon
答案 0 :(得分:1)
您创建了一个派对对象。在该Party对象中,您创建了一个warrior对象,但是您没有将它保存到对象中,因此无法在类外部访问它。
例如,如果你这样做:
@warrior = Warrior.new
现在你可以像这样访问那个战士:
party.warrior.toon
编辑:确保将warrior添加为attr_reader
答案 1 :(得分:0)
您的PartyFactory
课程有一些问题。如果这个类实际上是一个工厂,它不应该从Party
类继承。它应该是一个完全不同的类,负责创建聚会。
我会更改Party
构造函数以直接获取其成员。
class Party
attr_reader :member
def initialize(member)
@member = member
end
end
我会更改PartyFactory
类,使其不会从Party
类继承。
class PartyFactory
def create(occupation)
if occupation == :warrior
Warrior.new
elsif occupation == :mage
Mage.new
else
raise "Unknown hero"
end
end
end
要调用toon
方法,首先需要与工厂一起创建聚会,然后在聚会成员上调用toon
方法。
factory = PartyFactory.new
party = factory.create(:warrior)
party.member.toon