ruby模块与类混淆
我正在学习ruby,并试图弄清以下定义的含义:ruby模块与类混淆,ruby,class,module,Ruby,Class,Module,我正在学习ruby,并试图弄清以下定义的含义: class Rectangle::Square < Shape 类矩形::方形
class Rectangle::Square < Shape
类矩形::方形
所以我知道Square是Shape的一个子类,但是为什么要使用scope-resolution操作符呢?
这通常用于从ruby中的模块访问类和常量,但这里有类定义,那么它怎么可能已经位于模块内部呢?多谢各位 此定义“打开”矩形
类/模块,并向其添加一个新类,方形
。这或多或少相当于
class Rectangle
class Square < Shape
end
end
类矩形
类方形<形状
结束
结束
我能想到的唯一区别是,如果未定义Rectangle
,您的代码段将失败,而此代码段将不会失败。这是
module Rectangle
class Square < Shape
end
end
模块矩形
类方形<形状
结束
结束
除了未定义矩形时代码失败之外,还有另一个问题:
在类矩形
块中,您可以通过方形
引用另一个类。除此之外,您必须将其称为Rectangle::Square
。但是,如果将其定义为classrectangle::Square
,则必须将该类称为Rectangle::Square
。在矩形中命名的所有其他类(和其他常量)也是如此。您经常看到这种模式的原因是代码编写者希望避免完全限定嵌套类。通常情况下,外部模块(Rectangle
在本例中)包含几个需要相互交互的类
这与您经常看到这样定义的规格的原因相同:
class Rectangle
describe Square
end
end
这样,只需执行square.new
,就可以构造一个正方形。如果它是descripe Rectangle::Square
,那么您需要完全限定它,并执行Rectangle::Square。new
其他差异是持续查找,因为存在细微差异。