5

Rubyは初めてです。Rubyでの継承の使用に関して質問があります。

Doggy.rbという名前のファイル内にDoggyというクラスがあります

class Doggy
  def bark
    puts "Vicky is barking"
  end
end

puppy.rbという名前の別のファイルにPuppyという名前の別のクラスを作成しました

class Puppy < Doggy
end

puts Doggy.new.bark

このエラーが発生します:

Puppy.rb:1:in `<main>': uninitialized constant Doggy (NameError)

これらのクラス(DoggyとPuppy)を単一のファイル内にのみ含めることは必須ですか?

編集済み

提案に従って、私は示されているようにrequireとrequire_relativeを使用しようとしましたが、それでもエラーを下回っています

Puppy.rb:1:in `<main>': uninitialized constant Doggy (NameError)

    class Puppy < Doggy
    end
    require_relative 'Doggy.rb'
    puts Doggy.new.bark
4

6 に答える 6

5

Doggyのファイルからクラスを含むファイルを要求する必要がありますPuppy。置く

require './doggy'

または、ruby-1.9を使用している場合:

require_relative 'doggy'

in puppy.rb(ファイル名がdoggy.rbとpuppy.rbであると想定)。

于 2012-09-09T08:37:55.097 に答える
5

puppy.rbファイルで行われる変更
両方のファイルが同じディレクトリにあると仮定すると、次の方法でファイルが必要になることが予想されます。

doggy.rb

class Doggy
  def bark
    puts "Vicky is barking"
  end
end

puppy.rb

require File.expand_path('../doggy.rb', __FILE__)
class Puppy < Doggy
end

puts Doggy.new.bark
于 2012-09-09T09:37:44.877 に答える
1

また、他のみんなが言ったことに加えて、puts Dog.new.barkあなたのクラスはと呼ばれていないので、それはです、常に失敗します。注意してください。

于 2012-09-09T08:35:56.223 に答える
1

Doggy必須ではありません。宣言されているファイルを要求する必要があります。requireまたはrequire_relativeを使用できます。

次に、とにかく、宣言した名前を使用するようにしてください:DoggyではなくDog

于 2012-09-09T08:36:23.830 に答える
1

から継承したDoggy、の定義を含むファイルをロードしています。もちろん、それはおそらくうまくいきません。3行目の定義を含むファイルのみをロードする場合、1行目からどのように継承できますか?DoggyDoggyDoggy

于 2012-09-09T09:35:23.827 に答える
0

あなたはあなたの子犬のクラスにDoggy.rbを含める必要があります

于 2012-09-09T08:37:49.927 に答える