模块中的"自我"是什么意思?



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,其中self指的是类的实例。

我们来看看:

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

请注意,这不是模块所独有的,类也是如此。自self == Foo以来,没有什么能阻止我们做:

def Foo.baz
  3.14
end
Foo.baz  #=> 3.14

最新更新