我怎么能说
Math.sqrt(4)
Run Code Online (Sandbox Code Playgroud)
要么
Math::sqrt(4)
Run Code Online (Sandbox Code Playgroud)
但我不能说
Math.PI
Run Code Online (Sandbox Code Playgroud)
在红宝石
在这种情况下,点运算符正在做什么和结肠运算符之间有什么区别?
.是消息传递操作符,::是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)
Run Code Online (Sandbox Code Playgroud)
在Ruby中,您可以调用类或模块方法(可以通过类/模块名称本身调用),例如bar使用.和::.但是像这样的常量X应该被调用::,但是.不允许.在你的情况下sqrt是模块的类方法Math,而是模块PI的常量Math.
| 归档时间: |
|
| 查看次数: |
1647 次 |
| 最近记录: |