ruby模块与类混淆

ruby模块与类混淆,ruby,class,module,Ruby,Class,Module,我正在学习ruby,并试图弄清以下定义的含义: class Rectangle::Square < Shape 类矩形::方形

我正在学习ruby,并试图弄清以下定义的含义:

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

其他差异是持续查找,因为存在细微差异。