類方法型別
類有 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"