恆定分辨率總是要求您使用::
。
方法調用通常是一個句點(.
),但::
也是合法的。這不僅是真正的所謂的模塊方法,但對於調用任何對象的任何方法:
class Foo
def bar
puts "hi"
end
end
Foo.new::bar
#=> hi
這與其說是「語法糖」,因爲它只是一種語法,比如寫if
的能力或case
陳述與新行,then
和換行符,或者只是then
。
它是專門允許因爲Ruby允許使用相同的名稱爲常數的方法,有時是有道理的認爲他們是同一項目:
class Foo
class Bar
attr_accessor :x
def initialize(x)
self.x = x
end
end
def self.Bar(size)
Foo::Bar.new(size)
end
end
p Foo::Bar #=> Foo::Bar (the class)
p Foo::Bar(42) #=> #<Foo::Bar:0x2d54fc0 @x=42> (instance result from method call)
您在Nokogiri看到常用的紅寶石庫,它有(例如)Nokogiri::XML
模塊以及Nokogiri.XML
方法。當創建一個XML文檔,很多人選擇寫
@doc = Nokogiri::XML(my_xml)
你看這也是在Sequel庫,在那裏你可以一次:再次
class User < Sequel::Model # Simple class inheritance
class User < Sequel::Model(DB[:regular_users]) # Set which table to use
,我們有一個method (Sequel.Model)命名一樣一個constant (Sequel::Model)。第二行也可寫成
class User < Sequel.Model(DB[:regular_users])
......但看起來不太好。
你不會感到困惑:兩者都是合法的。爲什麼在下面看到我的擴展答案。 – Phrogz 2012-02-16 17:11:23