【问题标题】:Dot operator vs scope resolution operator with modules in Ruby [duplicate]点运算符与范围解析运算符与Ruby中的模块[重复]
【发布时间】:2013-08-05 15:27:45
【问题描述】:

我怎么会说

Math.sqrt(4)

Math::sqrt(4)

但我不能说

Math.PI

在红宝石中

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

【问题讨论】:

  • @alfasin 正如你已经链接到好帖子,我想我应该写..但现在想不需要写...我可以用这个链接来回答我吗? :)
  • @Babai 确定 - 只要您提供您使用的链接。

标签: ruby module


【解决方案1】:

. 是消息传递运算符,:: 是 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

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 2012-04-20
    • 2011-02-23
    • 2015-12-18
    • 2011-03-10
    • 2013-12-12
    • 1970-01-01
    • 2010-09-09
    • 2014-10-05
    相关资源
    最近更新 更多