Syntaxe détaillée de Ruby: quand il y a des variables et des méthodes avec le même nom

Dans Ruby, les variables et les méthodes peuvent avoir le même nom. S'il existe des variables et des méthodes portant le même nom, la variable est prioritaire. Cela n'a rien à voir avec l'ordre de définition.

Si vous ajoutez (), cela est considéré comme une méthode. Même si vous spécifiez un argument, ce sera un appel de méthode.

def foo(n = 1)
  "method" * n
end

foo = "variable"

#Ceci est une variable
foo #=> "variable"
#Ceci est un appel de méthode
foo() #=> "method"
#C'est aussi un appel de méthode
foo 2 #=> "methodmethod"

Si vous spécifiez un récepteur avec ., il est également considéré comme une méthode.

public  # Ruby 2.Jusqu'à 6:Si c'est privé.On ne peut pas être appelé avec/ 2.7 ou plus tard:OK sans public
def foo(n = 1)
  "method" * n
end

foo = "variable"

#Ceci est une variable
foo #=> "variable"
#Ceci est un appel de méthode
self.foo #=> "method"

Les noms de classe Ruby sont des noms constants, c'est-à-dire un type de variable, donc s'il y a des classes et des méthodes avec le même nom, le comportement sera le même que ci-dessus.

public
def Foo(n = 1)
  "method" * n
end

class Foo
end

#C'est une classe
Foo #=> Foo
#Ceci est un appel de méthode
Foo() #=> "method"
#C'est aussi un appel de méthode
Foo 2 #=> "methodmethod"
#C'est aussi un appel de méthode
self.Foo #=> "method"

Le module Kernel (https://ruby-doc.org/core-2.7.1/Kernel.html) a des méthodes nommées Array et String.

#Appelez la méthode String du module Kernel, pas la classe String.
String(1) #=> "1"

Recommended Posts

Syntaxe détaillée de Ruby: quand il y a des variables et des méthodes avec le même nom
[Head panic] Priorité lorsque des variables / méthodes portant le même nom sont utilisées dans des classes héritées
Rails Les méthodes privées font mal si vous ressentez la même chose que Java!
Si vous rencontrez des problèmes avec le problème de code de caractère du Myanmar (birman)
Si vous rencontrez des problèmes avec JPA ou Hibernate, ne cherchez pas sur Google et regardez d'abord ici
Que faire si vous ne pouvez pas exécuter avec la commande "nom du package Java / nom de la classe"
Ruby / rexml: tournez chacun avec un élément du même nom