我有以下代码:
module Books
MINBOOKPRICE = 10
end
这应该在类级别添加模块内容:
class BuySoon
extend Books
end
但:
BuySoon::MINBOOKPRICE #=> NameError: uninitialized constant BuySoon::MINBOOKPRICE
相反,如果我这样做,应该在BuySoon
实例级别添加模块内容:
class BuySoon
include Books
end
然后我得到
BuySoon::MINBOOKPRICE #=> 10
我是如何在模块中设置常量的?
答案 0 :(得分:1)
include
“增强实例”,而extend
“增强了类本身。”常量是类的属性(属于类'范围),这就是使用include
增强实例的原因自动获取定义的类常量。可以认为include
指令在c++
中具有“内联”功能:代码实际上是在include
指令中复制粘贴的。
无论你是否调用extend,都要增强本征类。因此,常量将在BuySoon.singleton_class::MINBOOKPRICE
处可用。换句话说,代码类似于:
包含:强>
class BuySoon
MINBOOKPRICE = 10
end
<强>延伸:强>
class BuySoon
class << self
MINBOOKPRICE = 10
end
end
希望它有所帮助。