Frage Eine knappe Erklärung von nil v. Leer v. Blank in Ruby on Rails


Ich finde mich immer wieder auf der Suche nach einer klaren Definition der Unterschiede von nil?, blank?, und empty? in Ruby auf Schienen. Hier ist der nächste, dem ich gekommen bin:

  • blank? Objekte sind falsch, leer oder eine Whitespace-Zeichenfolge. Beispielsweise, "", " ", nil, [], und {} sind leer.

  • nil? Objekte sind Instanzen von NilClass.

  • empty? Objekte sind klassenspezifisch und die Definition variiert von Klasse zu Klasse. Eine Zeichenfolge ist leer, wenn sie keine Zeichen enthält, und ein Array ist leer, wenn es keine Elemente enthält.

Fehlt etwas oder ist ein engerer Vergleich möglich?


953
2018-05-19 22:51


Ursprung


Antworten:


.nil? kann für jedes Objekt verwendet werden und ist wahr, wenn das Objekt null ist.

.empty? kann für Strings, Arrays und Hashes verwendet werden und gibt true zurück, wenn:

  • Stringlänge == 0
  • Arraylänge == 0
  • Hashlänge == 0

Laufen .empty? auf etwas, das nichts ist, wird ein werfen NoMethodError.

Das ist wo .blank? kommt herein. Es ist implementiert von Rails und wird auf jedem Objekt arbeiten sowie wie arbeiten .empty? auf Strings, Arrays und Hashes.

nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false

.blank? wertet auch true für Strings aus, die nicht leer sind, aber nur Leerzeichen enthalten:

"  ".blank? == true
"  ".empty? == false

Rails bietet auch  .present?, die die Negation von zurückgibt .blank?.

Array-Fehler: blank? wird zurückkehren false auch wenn alle Elemente eines Arrays sind leer. Um in diesem Fall die Leerstelle zu bestimmen, verwenden Sie all? mit blank?, beispielsweise:

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true 

1276
2018-05-20 16:14



Ich habe diese nützliche Tabelle mit allen Fällen gemacht:

enter image description here


581
2017-12-18 16:29



Erweitern Sie einfach Julians Tisch:

enter image description here

Ref: leer? leer? nil? 傻傻 分不清楚


173
2017-11-12 00:20



Kurzer Tipp: !obj.blank? == obj.present?

Kann in einigen Ausdrücken nützlich / einfacher auf die Augen sein


56
2017-07-13 11:33



Ein Unterschied ist das .nil? und .empty? sind Methoden, die von der Programmiersprache Ruby bereitgestellt werden, wohingegen .blank? ist etwas hinzugefügt durch das Web-Entwicklungs-Framework Rails.


43
2018-05-19 23:42



Ein besonderer Fall ist der Versuch, zu beurteilen, ob ein boolescher Wert gleich null ist:

false.present? == false
false.blank? == true
false.nil? == false

In diesem Fall wäre die Empfehlung zu verwenden .nil?


9
2017-11-14 13:56



Nur eine kleine Notiz über die any? Empfehlung: Er hat Recht, dass es ist allgemein gleichwertig !empty?. Jedoch, any? wird zurückkehren true zu einer Folge von nur Leerzeichen (ala " ").

Und natürlich, siehe auch den obigen 1.9 Kommentar.


8
2017-07-13 19:25