我怎么能说
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。