类方法类型
类有 3 种类型的方法:实例,单例和类方法。
实例方法
这些是可以从类的 instance
调用的方法。
class Thing
def somemethod
puts "something"
end
end
foo = Thing.new # create an instance of the class
foo.somemethod # => something
类方法
这些是静态方法,即它们可以在类上调用,而不是在该类的实例化上调用。
class Thing
def Thing.hello(name)
puts "Hello, #{name}!"
end
end
它相当于使用 self
代替类名。以下代码等同于上面的代码:
class Thing
def self.hello(name)
puts "Hello, #{name}!"
end
end
通过编写调用方法
Thing.hello("John Doe") # prints: "Hello, John Doe!"
单例方法
这些仅适用于该类的特定实例,但不适用于所有类。
# create an empty class
class Thing
end
# two instances of the class
thing1 = Thing.new
thing2 = Thing.new
# create a singleton method
def thing1.makestuff
puts "I belong to thing one"
end
thing1.makestuff # => prints: I belong to thing one
thing2.makestuff # NoMethodError: undefined method `makestuff' for #<Thing>
singleton
和 class
方法都称为 eigenclass
es。基本上,ruby 所做的是创建一个包含这些方法的匿名类,以便它不会干扰创建的实例。
另一种方法是使用 class <<
构造函数。例如:
# a class method (same as the above example)
class Thing
class << self # the anonymous class
def hello(name)
puts "Hello, #{name}!"
end
end
end
Thing.hello("sarah") # => Hello, sarah!
# singleton method
class Thing
end
thing1 = Thing.new
class << thing1
def makestuff
puts "I belong to thing one"
end
end
thing1.makestuff # => prints: "I belong to thing one"