我怎么能说
Math.sqrt(4)
或
Math::sqrt(4)
但我不能说
Math.PI
in ruby
在这种情况下,点运算符正在做什么和冒号运算符之间有什么区别?
答案 0 :(得分: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
的常量。