[英]ruby module and class confusion
我正在学习红宝石,并试图找出以下定义的含义:
class Rectangle::Square < Shape
因此,我知道Square是Shape的子类,但是为什么要使用范围解析运算符? 这通常用于从ruby中的模块访问类和常量,但是这里有类定义,那么如何将其放置在模块内部? 谢谢。
此定义“打开” Rectangle
类/模块,并向其添加一个新类Square
。 这或多或少等于
class Rectangle
class Square < Shape
end
end
我能想到的唯一区别是,如果未定义Rectangle
,则您的代码段将失败,而不会定义此代码段。
除了未定义Rectangle
时代码失败之外,还有另一个问题:
在class Rectangle
块中,您可以仅通过Square
引用另一个类。 在它外面,您必须将其称为Rectangle::Square
。 但是,如果将其定义为class Rectangle::Square
,则必须将该类称为Rectangle::Square
。 对于Rectangle
中命名空间的所有其他类(和其他常量)也是如此。 之所以经常看到这种模式,是因为代码编写者希望避免完全限定嵌套类。 通常,外部模块(在这种情况下为Rectangle
)包含一些需要相互交互的类。
这是您经常看到如下规格定义的相同原因:
class Rectangle
describe Square
end
end
这样,您只需执行Square.new
即可构建一个正方形。 如果describe Rectangle::Square
,那么您将需要完全限定它并执行Rectangle::Square.new
这是...的同义词
module Rectangle
class Square < Shape
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.