如何判断模块中的方法是实例方法还是class方法
How to tell if a method in a module is instance method or class method
我了解 include
创建实例方法,extend
创建 class 方法。我们如何判断一个方法是实例还是 class 方法?
在下面的例子中,看起来一个方法是一个实例方法和一个class方法。在某些情况下实例和 class 方法之间没有区别吗?
module Test
def aux
puts 'aux'
end
end
class A
include Test
end
class B
extend Test
end
a = A.new
a.aux
B.aux
include
和 extend
之间的区别在于混合模块的 class 的行为方式。 include
和 extend
都只适用于模块的 'instance' 方法(即不以 ModuleName 或 self
开头的方法)
示例:
module Foo
def a
puts "a"
end
def Foo.b
puts "b"
end
def self.c
puts "c"
end
end
a class 包含 此模块将只能访问 a
作为 实例方法 而一个 扩展 它的 class,同时只能作为 class 方法 访问 a
。两者都无法访问 b
或 c
,因为它们是 Foo 的 class 方法,只能通过调用 Foo.b
或 Foo.c
来访问
我了解 include
创建实例方法,extend
创建 class 方法。我们如何判断一个方法是实例还是 class 方法?
在下面的例子中,看起来一个方法是一个实例方法和一个class方法。在某些情况下实例和 class 方法之间没有区别吗?
module Test
def aux
puts 'aux'
end
end
class A
include Test
end
class B
extend Test
end
a = A.new
a.aux
B.aux
include
和 extend
之间的区别在于混合模块的 class 的行为方式。 include
和 extend
都只适用于模块的 'instance' 方法(即不以 ModuleName 或 self
开头的方法)
示例:
module Foo
def a
puts "a"
end
def Foo.b
puts "b"
end
def self.c
puts "c"
end
end
a class 包含 此模块将只能访问 a
作为 实例方法 而一个 扩展 它的 class,同时只能作为 class 方法 访问 a
。两者都无法访问 b
或 c
,因为它们是 Foo 的 class 方法,只能通过调用 Foo.b
或 Foo.c