我正在尝试将模块用作常量的命名空间。假设我有一个这样的模块:
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
答案 0 :(得分: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()
。
答案 1 :(得分:2)
第二种风格是正确的选择。区别在于Dog
的范围。第一个包括更大范围的模块。所以它也适用于你的例子。但它不会提供您想要的命名空间。
module AnimalModule
Dog = 1
end
class PetStore
include AnimalModule
end
Dog # => NameError: uninitialized constant Dog
PetStore::Dog # => 1
include AnimalModule
Dog # => 1