Gibt es einen besseren Weg als den folgenden, um zu überprüfen, ob eine Zeichenfolge null ist, OR 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 Handy
string.IsNullOrEmpty(myString)
Etwas Ähnliches wie in Ruby?
Wenn ich mir keine Sorgen um die Leistung mache, verwende ich häufig Folgendes:
if my_string.to_s.empty?
# It's nil or empty
end
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.
Ich mache das gerne wie folgt (in einer Umgebung ohne Rails/ActiveSupport):
variable.to_s.empty?
das funktioniert, weil:
nil.to_s == ""
"".to_s == ""
Eine Alternative zu jcobys Vorschlag wäre:
class NilClass
def nil_or_empty?
true
end
end
class String
def nil_or_empty?
empty?
end
end
Wie schon gesagt, Rails (ActiveSupport) haben einen handlichen Rohling? method und es wird so implementiert:
class Object
def blank?
respond_to?(:empty?) ? empty? : !self
end
end
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 arbeitet.
variable.blank? tut es . Gibt true zurück, wenn der String leer ist oder wenn der String null ist.
nil?
kann in booleschen Kontexten weggelassen werden. Im Allgemeinen können Sie dies verwenden, um den C # -Code zu replizieren:
return my_string.nil? || my_string.empty?
Vorsicht vor dieser Methode:
Wie Jesse Ezel sagt:
"Die Methode mag bequem erscheinen, aber die meiste Zeit habe ich festgestellt, dass diese Situation durch den Versuch entsteht, tiefere Fehler zu vertuschen.
Ihr Code sollte sich bei der Verwendung von Strings an ein bestimmtes Protokoll halten, und Sie sollten die Verwendung des Protokolls in Bibliothekscode und in dem Code verstehen, mit dem Sie arbeiten.
Das NullOrEmpty-Protokoll ist in der Regel eine schnelle Lösung (das eigentliche Problem liegt also immer noch woanders, und Sie haben zwei Protokolle verwendet) oder es ist ein Mangel an Fachwissen über ein bestimmtes Protokoll, wenn Sie neuen Code implementieren Ihre Rückgabewerte sind). "
Und wenn Sie die String-Klasse patchen ... seien Sie sicher NilClass wurde auch nicht gepatcht !
class NilClass
def empty?; true; end
end
Jede Klasse hat eine nil?
-Methode:
if a_variable.nil?
# the variable has a nil value
end
Und Strings haben die empty?
-Methode:
if a_string.empty?
# the string is empty
}
Denken Sie daran, dass ein String nicht gleich nil
ist, wenn er leer ist. Verwenden Sie die empty?
-Methode, um zu überprüfen, ob ein String leer ist.
Eine weitere Möglichkeit ist, nil in ein leeres Ergebnis umzuwandeln:
(my_string||'').empty?
Konrad Rudolph hat die richtige Antwort.
Wenn es Sie wirklich stört, reparieren Sie die String-Klasse oder fügen Sie sie einer Klasse/einem Modul Ihrer Wahl hinzu. Es ist wirklich keine gute Praxis, Kernobjekte zu patchen, es sei denn, Sie haben einen wirklich zwingenden Grund.
class String
def self.nilorempty?(string)
string.nil? || string.empty?
end
end
Dann können Sie String.nilorempty? mystring
Hier gibt es einige gute Antworten, aber Sie benötigen weder ActiveSupport noch Affen-Patches, um den hier üblichen Anwendungsfall zu behandeln. Zum Beispiel:
my_string.to_s.empty? if defined? my_string
Dies wird "das Richtige tun", wenn my_string null oder eine leere Zeichenfolge ist, aber keine NameError-Ausnahme if auslöst my_string ist nicht definiert. Dies ist im Allgemeinen den ausgeklügelten vorzuziehen:
my_string.to_s.empty? rescue NameError
oder seine ausführlichere Art, weil Ausnahmen wirklich für Dinge gespeichert werden sollten, die Sie nicht erwarten. In diesem Fall ist eine undefinierte Variable, obwohl es sich um einen häufigen Fehler handeln kann, kein außergewöhnlicher Umstand. Daher sollte sie entsprechend behandelt werden.
Ihr Kilometerstand kann variieren.
Haben Sie Verfeinerungen ausprobiert?
module Nothingness
refine String do
alias_method :nothing?, :empty?
end
refine NilClass do
alias_method :nothing?, :nil?
end
end
using Nothingness
return my_string.nothing?
Für Code-Golfer (erfordert Ruby 2.3 oder höher):
if my_string&.> ""
p 'non-empty string'
else
p 'nil or empty string'
end
In Rails können Sie #blank?
ausprobieren.
Achtung: Sie erhalten ein positives Ergebnis, wenn der String aus Leerzeichen besteht:
nil.blank? # ==> true
''.blank? # ==> true
' '.blank? # ==> true
'false'.blank? # ==> false
Ich wollte nur darauf hinweisen. Vielleicht entspricht es Ihren Bedürfnissen
UPD. Warum bekomme ich alte Fragen in meinem Feed? Entschuldigung für die Nekropostierung.