Ruby Language Types de méthodes de classe


Exemple

Les classes ont 3 types de méthodes: les méthodes instance, singleton et class.

Méthodes d'instance

Ce sont des méthodes qui peuvent être appelées à partir d'une instance de la classe.

class Thing
  def somemethod
    puts "something"
  end
end

foo = Thing.new # create an instance of the class
foo.somemethod # => something

Méthode de classe

Ce sont des méthodes statiques, c'est-à-dire qu'elles peuvent être invoquées sur la classe et non sur une instanciation de cette classe.

class Thing
  def Thing.hello(name)
    puts "Hello, #{name}!"
  end
end

Cela équivaut à utiliser self à la place du nom de la classe. Le code suivant est équivalent au code ci-dessus:

class Thing
  def self.hello(name)
    puts "Hello, #{name}!"
  end
end

Invoquer la méthode en écrivant

Thing.hello("John Doe")  # prints: "Hello, John Doe!"

Méthodes Singleton

Ceux-ci ne sont disponibles que pour des instances spécifiques de la classe, mais pas pour tous.

# 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>

Les méthodes singleton et class sont toutes deux appelées eigenclass . Fondamentalement, Ruby crée une classe anonyme qui contient de telles méthodes afin de ne pas interférer avec les instances créées.

Une autre façon de faire est d' class << constructeur de class << . Par exemple:

# 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"