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:

  1. 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)
    
  2. 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?

15
demandé sur mu is too short 2010-01-09 04:41:26

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'