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