Quelles sont les règles en majuscules et en minuscules du nom de méthode ruby?
je suis un débutant de Ruby. D'après le livre, je sais qu'un nom de méthode Ruby devrait commencer par une lettre minuscule ou un trait de soulignement. Mais j'ai trouvé différents scénarios:
si une méthode est définie en dehors d'une classe, elle ne peut commencer qu'avec une lettre minuscule, Ruby se plaindra d'une erreur si vous essayez de définir une méthode qui commence par une lettre majuscule, par exemple:
define sayHi puts "Hello" end sayHi # => Hello
mais, le code suivant ne fonctionne pas:
define SayHi puts "Hello" end SayHi
il va produire une erreur:
:in `<main>': uninitialized constant SayHi (NameError)
Si une méthode est définie à l'intérieur d'une classe, alors il peut commencer avec une lettre majuscule:
class Test def SayHi puts "hello" end end t = Test.new t.SayHi # => hello
personne Ne sait pourquoi #1 ne fonctionne pas alors que #2 travail? Quelles sont les règles exactes du nom de la méthode ruby?
2 réponses
Par convention, les choses qui commencent par des lettres majuscules sont constantes. Quand vous invoquez SayHi
, tu dis à Ruby de chercher un constante avec ce nom. Bien sûr, il n'existe pas, donc il échoue.
si vous voulez invoquer la méthode, vous devrez ajouter une paire de parenthèses. Par exemple,
def S
puts "shazam!"
end
S #=> NameError: uninitialized constant S
S() #=> "shazam!"
à l'Intérieur d'une classe, la résolution règles sont un peu différentes. Définissons une classe simple avec une constante et un méthode nommée à ressembler à une constante:
irb(main):001:0> class C
irb(main):002:1> A = "x"
irb(main):003:1> def B
irb(main):004:2> puts "B() invoked"
irb(main):005:2> end
irb(main):006:1> end
=> nil
Maintenant, A
est certainement une constante. Mais qu'