ruby-mine

exploring the mine

Syntax-Samstag: defined? Foo()

von murphy am 29.09.2007 (03 Uhr)

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

Name (notwendig)

Mail (wird nicht veröffentlicht)

Webseite


Kommentare

  1. WoNáDo schrieb am 29.09.2007 (11 Uhr)

    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.