module Foo
BAR = :bar # константа
class Baz # класс-в-модуле
end
def self.qux # метод класса
:qux
end
end
Foo.BAR # !> undefined method `Baz' for Foo:Class
Foo::BAR # => :bar
Foo.Baz # !> undefined method `Baz' for Foo:Class
Foo::Baz # => Foo::Baz
但是,两者都可用于调用类本身的方法:
Foo.qux # => :qux
Foo::qux # => :qux
...点首先寻找方法:
class Wut
def self.Wat # НЕ ДЕЛАЙТЕ ТАК. Методы принято именовать в snake_case, НЕ с большой буквы
:Wat
end
class Wat
end
end
Wut::Wat # => Wut::Wat
Wut.Wat # => :Wat
...以及单个对象的方法,在理论上(但不要这样做):
class Hi
def hi
:hi
end
end
Hi.new::hi # => :hi
还有一种特殊情况,使用::“nothing”来指定类的“绝对路径”,忽略附近作用域中的同名事物:
class Ambi; end
class Huge
class Ambi; end
puts Ambi # |> Huge::Ambi
puts ::Ambi # |> Ambi
end
这就是所谓的。"scope resolution operator",指定标识符范围的操作符
在您的情况下,它只是获取
Table在 module 中定义的类Prawn。尽管它们都可以很容易地至少是类,至少是模块,但这不会影响操作员的行为。它类似于
.,在 Ruby 中用于调用的点。但是使用点,你不能得到嵌套的常量,无论是嵌套的模块,类,还是只是一些值 (Ruby,一般来说,对于灯泡,模块和类也是值):但是,两者都可用于调用类本身的方法:
...点首先寻找方法:
...以及单个对象的方法,在理论上(但不要这样做):
还有一种特殊情况,使用
::“nothing”来指定类的“绝对路径”,忽略附近作用域中的同名事物:Ruby 社区风格指南建议
::仅将其用于获取常量值,而不用于调用方法。一个例外是对视图构造函数的调用Nokogiri::HTML(),尽管从好的方面来说,这些是普通方法。