2013-08-05 76 views
1

模塊作用域運算爲什麼我能說點操作VS與紅寶石

Math.sqrt(4) 

Math::sqrt(4) 

,但我不能說

Math.PI 

在紅寶石

什麼是點之間的區別操作符在這種情況下是否和冒號操作符?

+0

@alfasin正如你已經鏈接到好帖子,我想我應該寫..但現在認爲不需要寫...我可以使用此鏈接到我的答案..? :) –

+1

@Babai肯定的事情 - 只要你提供你使用的鏈接。 – alfasin

回答

7

.是消息傳遞運算符,::是Ruby中的作用域解析運算符。見下面的例子:

module Foo 
X = 12 
def self.bar 
    p "hi" 
end 
end 
Foo::bar # => "hi" 
Foo.bar # => "hi" 
Foo::X # => 12 
Foo.X 
# undefined method `X' for Foo:Module (NoMethodError) 

在Ruby可以調用的類或模塊的方法,如bar使用.::也(其可以由類/模塊名本身被調用)。但是像X這樣的常量應該需要使用::來調用,但不允許使用.。在您的情況中,sqrt是模塊Math的類方法,而PI是模塊Math的常量。