Я здесь новичок и у меня вопрос о наследовании классов. Я делаю проект CareerFoundry и не могу понять, почему я продолжаю получать сообщение об ошибке:
неинициализированная константа Cat (NameError)
Кроме того, я получаю это, когда вынимаю информацию о Cat, а Dog не инициализируется.
Я предполагаю, что это означает, что я неправильно пишу, что Cat является частью класса Pet, но я подумал, что задам этот вопрос сообществу, и, надеюсь, у него есть ответ.
class Pet
attr_reader :color, :breed
attr_accessor :name
def initialize(color, breed)
@color = color
@breed = breed
@hungry = true
end
def feed(food)
puts "Mmmm, " + food + "!"
@hungry = false
end
def hungry?
if @hungry
puts "I\'m hungry!"
else
puts "I\'m full!"
end
@hungry
end
class Cat < Pet
def speak
puts "Meow!"
end
end
class Dog < Pet
def speak
puts "Woof!"
end
end
end
kitty = Cat.new("grey", "Persian")
"Lets inspect our new cat:"
puts kitty.inspect
"What class is this new cat"
puts kitty.class
puppy = Dog.new("Black", "Beagle")
puppy.speak
puts puppy.breed
2 ответа
Ваши классы Cat
и Dog
объявлены в области Pet
, поэтому, если вы хотите создать объект Cat
, вам нужно написать
c = Pet::Cat.new("red", "Maine coon")
Чтобы создать объект Cat
так, как вы это делаете, вам нужно извлечь класс Cat
вне класса Pet
.
class Pet
attr_reader :color, :breed
attr_accessor :name
def initialize(color, breed)
@color = color
@breed = breed
@hungry = true
end
def feed(food)
puts "Mmmm, " + food + "!"
@hungry = false
end
def hungry?
if @hungry
puts "I\'m hungry!"
else
puts "I\'m full!"
end
@hungry
end
end
class Cat < Pet
def speak
puts "Meow!"
end
end
class Dog < Pet
def speak
puts "Woof!"
end
end
Теперь вы можете просто написать
c = Cat.new("red", "Maine coon")
Попробуйте Cat = Pet::Cat
Вы также можете создать module
и использовать include
Или просто объявите класс Cat в области ядра
Или просто позвоните в Pet::Cat.new
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.