2013-08-05 73 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的常量。