有什么区别:
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指的是类的实例。
答案 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