我正在Rails 3中实现一个API,并注意到一个像class Api::ToursController < ApplicationController
定义的示例控制器。有谁知道冒号表示什么?它是继承吗?或者它是否指示扩展ToursController?我试着寻找答案,但还没有想出任何答案。
以下是我引用的内容:https://github.com/nesquena/rabl/wiki/Set-up-rabl-for-Ruby-on-Rails
答案 0 :(得分:5)
::
是许多语言的范围解析运算符(即名称空间运算符),包括C ++和Ruby,所以它并不特定于Rails。
在Ruby中,模块定义了名称空间,因此您可以看到如下代码:
Net::HTTP.get 'stackoverflow.com'
在get
模块的HTTP
类中调用Net
类方法。
在Rails中,名称空间允许您更好地组织代码(例如,将API控制器与其他代码分开),并作为模块实现。
答案 1 :(得分:1)
Api::ToursController
表示有一个名为Api
的外部模块,其中ToursController
类位于其中。 ::
是名称空间运算符。
有时您会看到以::开头的模块名称,例如::Something
,这表明Ruby要查看名为Something的类或模块的最外层命名空间(Main)。这通常发生在您在gem的源代码中的某个位置并且它引用外部类或模块时。
您可以include Api
将当前级别的模块Api中的所有内容包含在内,这样您就不需要名称空间运算符,并且可以使用ToursController
而不使用'Api ::前缀' “
答案 2 :(得分:0)
它是命名空间! Module :: Class.method