2016-10-31 8 views
0

をインスタンス化しようとすると、私はエラーを受信して​​いたときに初期化されていない一定のエラーを取得:新しいクラス

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 

答えて

2

あなたはAnimalクラス内Pigクラスを定義しました。

piggy = Animal::Pig.new("oink") 

PigCowクラスを定義します。それはあなたがそれはあなたが正しくクラスを参照するようにしたいと思う問題を解決するために、あることを意図したもので、最も可能性がないという事実にもかかわらず

Animalクラスの外側にある場合は、を開く前にAnimalクラスを閉じます。この方法でインスタンス化することができます:

piggy = Pig.new("oink") 
+0

Ahh参照してください。私は両方の方法を試しました。ありがとう、私はRubyがあなたが指定しなければPigサブクラスを見つける場所を知らないことに気づいたことはありません。とても有難い。 –

+0

ジャック、どこにサブクラスを見つけるのか分からないことはあまりありません。サブクラスの問題は赤いニシンです。それは、あなたのPigクラスがAnimalクラスの中に入っていることです(そして、ファイルではなく_class_を意味します)。たとえあなたがAnimalを閉じる前にPigを開いただけで、PigがAnimalのサブクラスではなかったとしても、あなたは同じ問題に遭遇していました。 – philomory

関連する問題