使用Ruby中的模块的点运算符与范围解析运算符

时间:2013-08-05 15:27:45

标签: ruby module

我怎么能说

Math.sqrt(4)

Math::sqrt(4)

但我不能说

Math.PI

in ruby​​

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

1 个答案:

答案 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的常量。