2012-12-03 56 views
1

我想用一個模塊作爲我的常量的命名空間。比方說,我有一個這樣的模塊:我應該在哪裏放置include語句?

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 

回答

2

第二種風格是正確的選擇。區別在於Dog的範圍。第一個包含更大範圍的模塊。所以它也適用於你的例子。但它不會提供你想要的命名空間。

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

include AnimalModule 
Dog # => 1 
1

您可以像在第二個代碼塊中那樣在類之後包含模塊:

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()方法的結果。