Ruby Language Quand utiliser soi-même?


Exemple

La plupart du code Ruby utilise le récepteur implicite, donc les programmeurs qui sont nouveaux à Ruby sont souvent confus au sujet de quand utiliser self - self . La réponse pratique est que le self est utilisé de deux manières principales:

1. Pour changer le récepteur.

Habituellement, le comportement de def dans une classe ou un module consiste à créer des méthodes d'instance. Self peut être utilisé pour définir des méthodes sur la classe à la place.

class Foo
  def bar
    1
  end

  def self.bar
    2
  end
end

Foo.new.bar #=> 1
Foo.bar #=> 2

2. Désambiguïser le récepteur

Lorsque les variables locales peuvent avoir le même nom qu'une méthode, un récepteur explicite peut être amené à désambiguïser.

Exemples:

class Example
  def foo
    1
  end

  def bar
    foo + 1
  end

  def baz(foo)
    self.foo + foo # self.foo is the method, foo is the local variable
  end

  def qux
    bar = 2
    self.bar + bar # self.bar is the method, bar is the local variable
  end 
end

Example.new.foo    #=> 1
Example.new.bar    #=> 2
Example.new.baz(2) #=> 3
Example.new.qux    #=> 4

L'autre cas courant nécessitant la désambiguïsation implique des méthodes qui aboutissent au signe égal. Par exemple:

class Example
  def foo=(input)
    @foo = input
  end

  def get_foo
    @foo
  end

  def bar(input)
    foo = input # will create a local variable
  end

  def baz(input)
    self.foo = input # will call the method
  end
end

e = Example.new
e.get_foo #=> nil
e.foo = 1
e.get_foo #=> 1
e.bar(2)
e.get_foo #=> 1
e.baz(2)
e.get_foo #=> 2