1

定数の名前空間としてモジュールを使用しようとしています。私がこのようなモジュールを持っているとしましょう:

module AnimalModule
  Dog = 1
end

PetStoreモジュールを使用するというクラス。includeステートメントはどこに配置すればよいですか?

(1)こんな感じですか:

# PetStore.rb
include AnimalModule
class PetStore
end

(2)またはこのように:

# PetStore.rb
class PetStore
  include AnimalModule
end

クラスのインスタンスメソッドで定数を使用しようとしていますが、どちらの方法も同じように機能しているようです。

class PetStore
  def feed
    puts Dog
  end 
end
4

2 に答える 2

2

2番目のスタイルは正しい選択です。違いはの範囲ですDog。1つ目は、より広い範囲のモジュールを含みます。したがって、これはあなたの例でも機能します。ただし、必要な名前空間は提供されません。

module AnimalModule
  Dog = 1
end
class PetStore
  include AnimalModule
end
Dog # => NameError: uninitialized constant Dog
PetStore::Dog # => 1

include AnimalModule
Dog # => 1
于 2012-12-03T07:43:42.863 に答える
2

2番目のコードブロックで行ったのと同じように、クラスの後にモジュールを含めます。

C:\Users\Hunter>irb
irb(main):001:0> module AnimalModule
irb(main):002:1>   Dog = 1
irb(main):003:1> end
=> 1
irb(main):004:0> class PetStore
irb(main):005:1>   include AnimalModule
irb(main):006:1>   def feed
irb(main):007:2>     puts Dog
irb(main):008:2>   end
irb(main):009:1> end
=> nil
irb(main):010:0> p = PetStore.new()
=> #<PetStore:0x25e07b0>
irb(main):011:0> p.feed
1
=> nil

インタラクティブインタープリターでコードを使用し、メソッド1を呼び出した結果として取得しましたfeed()

于 2012-12-03T06:15:48.850 に答える