我怎么能说
Math.sqrt(4)
或者
Math::sqrt(4)
但我不能说
Math.PI
在红宝石中
在这种情况下,点运算符和冒号运算符有什么区别?
.
是消息传递运算符,::
是 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)
bar
在 Ruby 中,您可以像使用.
and一样调用类或模块方法(可以通过类/模块名称本身调用)::
。但是像这样的常量X
应该需要使用::
,但.
不允许。在你的情况下sqrt
是模块的类方法Math
,而是模块PI
的常量Math
。