Dass man Methoden in Ruby auch groß schreiben darf, ist ja allgemein bekannt. Es gibt sogar Methoden wie Array, die genauso heißen wie eine Konstante. Die Namensräume von Konstanten und Methoden sind also getrennt.
Doch wie geht defined? damit um? Erkennt es, dass es zwei Objekte mit demselben Namen gibt?
# Ruby 1.8/1.9 Foo = 'Konstante' def Foo 'Methode' end Foo # => "Konstante" Foo() # => "Methode" defined? Foo # => "constant" defined? Foo() # => "method"
Also: Wenn man eine großgeschriebene Methode auf Existenz testen will, muss man Klammern dahinter setzen.
Kommentar schreiben
Kommentare
Das hast Du aber bei der Benutzung von Kleinbuchstben auch, wenn Du eine Variable und eine Methode gleichen Namens hast. Ein echter Unterschied zwischen Methoden mit Grossbuchstaben und Kleinbuchstaben besteht darin, dass er auf "defined? Otto" mit "nil" antwortet, dagegen auf "defined? otto" mit "method", wenn beide definiert sind und keine Konstante und Variable gleichen Namens existiert. Bei Methoden mit Grossbuchstaben muss auch bei Namenseindeutigkeit mit Klammern abgefragt werden.