Ruby类方法类型
示例
类具有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"