Ruby Fall für null, äquivalent zu Python Keine oder JavaScript undefined
Wie funktioniert Ruby ' s nil
manifestieren sich im code? Zum Beispiel in Python verwenden Sie Keine Standard-argument, wenn es bezieht sich auf ein anderes argument, aber in Ruby können Sie sich an andere Argumente in der arg-Liste (siehe diese Frage). In JS, undefined
öffnet sich noch mehr, denn Sie kann nicht angeben, default-Argumente überhaupt. Können Sie ein Beispiel geben, wie RubyNone
erscheint und wie es behandelt?
Ich bin nicht auf der Suche für nur ein Beispiel für die Verwendung nil
. Vorzugsweise wäre es ein echter code-snippet, das war die Verwendung der nil
aus irgendeinem Grund oder andere.
- Du meinst
nil
? - das ist das eine. ich bin mehr auf der Suche nach Anwendungsfall als den Namen der Variablen in Ruby, also ich habe bearbeitet die Frage zu reflektieren, dass
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ruby ' s nil und Python
None
sind so ziemlich gleichwertig (Sie repräsentieren die Abwesenheit von Wert), aber die Leute kommen von Python kann finden, überraschend Verhalten. Erste, Ruby zurücknil
in Situationen, in Python, wirft eine Ausnahme:Zugriff auf arrays und hashes:
Instanz Instanz-Variablen:
Die zweite Bemerkenswerte Tatsache ist, dass
nil
ist ein Objekt mit vielen Methoden, Sie können auch konvertieren zu integer, float oder string:Wenig überraschend ist, dass einige Python-Programmierer dazu neigen mögen diese permissiven Verhalten (ich habe es auf den ersten), aber es ist ok, wenn Sie es gewohnt sind.
Ich bin nicht sicher, ob dies Ihre Frage beantwortet, nur meine 2 Cent.
@
bedeuten, die in der Instanz-Variablen Beispiel?@
Klassenvariablen mit@@
.[1, 2, 3].fetch(999)
statt, erhalten Sie eine Ausnahme. Wenn Sie Warnungen auf, erhalten Sie eine Warnung überMyClass.new.hello
. Wenn SieInteger(nil)
oderFloat(nil)
erhalten SieTypeError
s.String(nil)
gibt Sie einen leeren string, obwohl. Auch, meinst du "Freizügig" (so dass eine Menge Dinge), nicht "promiscuous" (sex oder Wechselwirkungen mit vielen Dingen)?Einen Einsatz von
nil
oft sieht man in Ruby-code ist der folgende:Dies funktioniert, weil sobald eine variable wurde gesehen auf der linken Seite einer Zuweisung, wird damit implizit den Wert nil.
So, wenn der
a || 10
Teil ist ausgewertet, es ergibtnil || 10
, das ergibt 10.nil
undfalse
sind auch die nur zwei Werte in Ruby, die logisch falsch ist, so ist es üblich, die Methoden zurücknil
im Falle des Scheiterns. Es ist ein Juwel namensandand
dass nutzt genau diese, so sondern so etwas wieschreiben Sie
Diese im Grunde übersetzt, um trim
@first_name
wenn es einen anderen Wert alsnil
, sonst ausgewertetnil
. Wie Sie sich vorstellen können, dies ist besonders nützlich, wenn die Verkettung von Methoden, bei denen einer der Vermittler kann potenziell zurücknil
.Außerdem
nil
wird auch zurückgegeben, wenn Sie versuchen, Zugriff auf nicht vorhandene Elemente der Sammlungen, z.B. im Falle von arrays oder hashes. Ein nicht initialisierter Instanz-Variablen auch den Wertnil
.Ich bin nicht allzu bewandert in Python, sondern von dem, was ich gesehen habe
nil
undNone
dienen so ziemlich den gleichen Zweck.andand
undmaybe
erinnern mich an dieMaybe
Monade in Haskell.ick
Dank für die Zugabe 🙂mebbe
Schlüsselwort in lolcode.Zusätzlich zu allen Erklärungen über null, ruby hat auch 'bestimmt?'.
Mein Ruby-fu ist sehr schwach, aber
nil
könnte das sein, was du suchst. Hier ist ein kurzes Beispiel für die Verwendung vonnil
in einer Funktion, die als default-argument.=> nil
in der Ausgabe dort oben: das ist der irb zeigen, die den Rückgabewert derfoo
Methode.Sind Sie auch an Stelle von
void
: In einer statischen Sprache, die der compiler einfach verbieten Sie von der Nutzung der Rückgabewert einervoid
Funktion, aber in einer dynamischen Sprache jeden Verfahrens hat die Rückkehr etwas. So der Besondere Wertnil
verwendet wird.