1

我怎么能说

Math.sqrt(4)

或者

Math::sqrt(4)

但我不能说

Math.PI

在红宝石中

在这种情况下,点运算符和冒号运算符有什么区别?

4

1 回答 1

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)

bar在 Ruby 中,您可以像使用.and一样调用类或模块方法(可以通过类/模块名称本身调用)::。但是像这样的常量X应该需要使用::,但.不允许。在你的情况下sqrt是模块的类方法Math,而是模块PI的常量Math

于 2013-08-05T15:29:31.727 回答