“自我”在模块中意味着什么?

时间:2015-09-04 02:22:11

标签: ruby

有什么区别:

module Math
  def self.square(num)
    num**2
  end
end
puts Math.square(6) 

module Math
  def square(num)
    num**2
  end
end
puts Math.square(6) 

第一个例子中的“自我”是什么?我只习惯在类中使用self,其中self指的是类的实例。

1 个答案:

答案 0 :(得分:1)

好吧,让我们看看:

module Foo
  p self
end
# prints: Foo

所以self是模块本身。这允许我们直接在Foo上定义方法,而不是它的实例:

module Foo
  def self.bar
    42
  end
end

Foo.bar  #=> 42

class A; include Foo; end
A.new.respond_to?(:bar)  #=> false

请注意,这不是Module独有的,对于Classes也是如此。自self == Foo以来,没有什么能阻止我们这样做:

def Foo.baz
  3.14
end

Foo.baz  #=> 3.14