Gibt es eine bessere Möglichkeit als die folgende, um zu überprüfen, ob eine Zeichenfolge Null ist ODER in Ruby eine Länge von 0 hat?
if !my_string || my_string.length == 0
return true
else
return false
end
In C # gibt es das Praktische
string.IsNullOrEmpty(myString)
Ähnliches wie in Ruby?
my_string || my_string.length == 0
wird einNoMethodError
if erhöhen, wennmy_string
null ist. Ich denke, Sie meinten:my_string.nil? || my_string.length == 0
!my_string || my_string.length == 0
Antworten:
Wenn ich mir keine Sorgen um die Leistung mache, verwende ich oft Folgendes:
Es gibt natürlich verschiedene Variationen ...
quelle
strip
kann sehr ineffizient sein.Wenn Sie ActiveSupport benötigen, können Sie einfach die
#blank?
Methode verwenden, die sowohl für NilClass als auch für String definiert ist.quelle
Ich mache das gerne wie folgt (in einer Umgebung ohne Rails / ActiveSupport):
das funktioniert weil:
quelle
string.to_s.empty?
für beidenil
und funktioniert""
.Eine Alternative zu jcobys Vorschlag wäre:
quelle
Wie hier schon gesagt, haben Rails (ActiveSupport) einen praktischen Rohling? Methode und es ist wie folgt implementiert:
Ziemlich einfach zu jedem Ruby-basierten Projekt hinzuzufügen.
Das Schöne an dieser Lösung ist, dass sie nicht nur für Strings, sondern auch für Arrays und andere Typen automatisch magisch funktioniert.
quelle
variable.blank? werde es tun. Es gibt true zurück, wenn die Zeichenfolge leer ist oder wenn die Zeichenfolge null ist.
quelle
nil?
kann in booleschen Kontexten weggelassen werden. Im Allgemeinen können Sie damit den C # -Code replizieren:quelle
Achten Sie zunächst auf diese Methode:
Wie Jesse Ezel sagt:
Und wenn Sie die String-Klasse patchen ... stellen Sie sicher, dass NilClass auch nicht gepatcht wurde !
quelle
Jede Klasse hat eine
nil?
Methode:Und Strings haben die
empty?
Methode:Denken Sie daran, dass eine Zeichenfolge nicht gleich ist,
nil
wenn sie leer ist. Verwenden Sie daher dieempty?
Methode, um zu überprüfen, ob eine Zeichenfolge leer ist.quelle
Eine andere Möglichkeit besteht darin, Null im laufenden Betrieb in ein leeres Ergebnis umzuwandeln:
(my_string||'').empty?
quelle
Konrad Rudolph hat die richtige Antwort.
Wenn es Sie wirklich nervt, patchen Sie die String-Klasse mit einem Affen oder fügen Sie sie einer Klasse / einem Modul Ihrer Wahl hinzu. Es ist wirklich keine gute Praxis, Kernobjekte von Affen zu patchen, es sei denn, Sie haben einen wirklich zwingenden Grund.
Dann können Sie tun
String.nilorempty? mystring
quelle
Suchen Sie in Plain Ruby nach leeren Zeichenfolgen, während Sie NameError-Ausnahmen vermeiden
Hier gibt es einige gute Antworten, aber Sie benötigen weder ActiveSupport noch Affen-Patching, um den hier üblichen Anwendungsfall zu lösen. Beispielsweise:
Dies wird "das Richtige tun", wenn my_string null oder eine leere Zeichenfolge ist, aber keine NameError-Ausnahme auslösen, wenn my_string nicht definiert ist. Dies ist im Allgemeinen den erfundenen vorzuziehen:
oder es ist ausführlicher, weil Ausnahmen wirklich für Dinge gespeichert werden sollten, die Sie nicht erwarten. In diesem Fall ist eine undefinierte Variable zwar ein häufiger Fehler, aber kein außergewöhnlicher Umstand. Daher sollte sie entsprechend behandelt werden.
Ihr Kilometerstand kann variieren.
quelle
Haben Sie Refinements ausprobiert?
quelle
Wenn Sie Schienen verwenden, können Sie verwenden
#present?
Umgekehrt, um zu prüfen, ob keine oder keine Länge verwendet wird
!present?
quelle
In Schienen können Sie versuchen
#blank?
.Warnung: Sie erhalten positive Ergebnisse, wenn der String aus Leerzeichen besteht:
Ich wollte nur darauf hinweisen. Vielleicht passt es Ihren Bedürfnissen
UPD. Warum bekomme ich alte Fragen in meinem Feed? Entschuldigung für die Nekropostierung.
quelle
Für Code-Golfer:
Oder wenn Sie kein Golfer sind (erfordert Ruby 2.3 oder höher):
quelle