Я получаю сообщение об ошибке:Получение неинициализированной постоянной ошибки при попытке создать экземпляр нового класса
lynda.rb:206:in `<main>': uninitialized constant Pig (NameError)
, когда я пытаюсь создать экземпляр нового экземпляра класса свиней. Кто-нибудь знает, почему я получаю эту ошибку? Я искал в Интернете, и мне сказали, что обычно это связано с тем, что вы не требуете своего родительского класса. Однако мой родительский класс находится в одном файле.
class Animal
attr_accessor :name
attr_writer :colour
attr_reader :legs, :arms
def initialize(noise,legs=4,arms=0)
@noise = noise
@legs = legs
@arms = arms
puts "A new animal has been instantiated"
end
def noise=(noise)
@noise = noise
end
def noise
@noise
end
class Pig < Animal
def noise
parent_method = super
puts "Hello and #{parent_method}"
end
end
class Cow < Animal
end
end
piggy = Pig.new("oink")
p piggy.noise
Ahh Я вижу. Я пробовал в обоих направлениях. Спасибо, я никогда не понимал, что Ruby не знает, где найти подкласс Pig, если вы не укажете. Очень признателен. –
Джек, это не столько не знать, где найти подклассы; проблема подкласса - это красная селедка. Это то, что вы _contained_ ваш класс Pig _inside_ класс Animal (и я имею в виду _class_, а не файл); вы столкнулись бы с той же проблемой, даже если Pig не был подклассом Animal, просто потому, что вы открыли Pig перед закрытием Animal. – philomory