类具有3种类型的方法:实例,单例和类方法。
这些是可以从instance类的调用的方法。
class Thing def somemethod puts "something" end end foo =Thing.new# 创建类的实例 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!"这些仅适用于该类的特定实例,而不适用于所有实例。
# 创建一个空类 class Thing end # 该类的两个实例 thing1 = Thing.new thing2 = Thing.new # 创建一个单例方法 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方法被称为eigenclassES。基本上,ruby所做的是创建一个包含此类方法的匿名类,以便它不会干扰所创建的实例。
另一种方法是通过class <<构造函数。例如:
# 类方法(与上面的示例相同)
class Thing
class << self # 匿名类
def hello(name)
puts "Hello, #{name}!"
end
end
end
Thing.hello("sarah") # => Hello, sarah!
# 单例法
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"