Czy jest lepszy sposób niż poniższy, aby sprawdzić, czy łańcuch jest zerowy LUB ma długość 0 w Rubim?
if !my_string || my_string.length == 0
return true
else
return false
end
W C # jest poręczny
string.IsNullOrEmpty(myString)
Coś podobnego do tego w Rubim?
my_string || my_string.length == 0
podniesieNoMethodError
jeślimy_string
jest zero. Myślę, że miałeś na myśli:my_string.nil? || my_string.length == 0
!my_string || my_string.length == 0
Odpowiedzi:
Kiedy nie martwię się o wydajność, często używam tego:
Oczywiście istnieją różne warianty ...
źródło
strip
może być dość nieefektywna.Jeśli chcesz wymagać ActiveSupport, możesz po prostu użyć
#blank?
metody, która jest zdefiniowana zarówno dla NilClass, jak i String.źródło
Lubię to robić w następujący sposób (w środowisku innym niż Rails / ActiveSupport):
to działa, ponieważ:
źródło
string.to_s.empty?
działa zarówno w przypadku, jaknil
i""
.Alternatywą dla propozycji jcoby'ego byłoby:
źródło
Jak powiedziano wcześniej, Railsy (ActiveSupport) mają poręczny blank? metoda i jest zaimplementowana w następujący sposób:
Całkiem łatwo dodać do dowolnego projektu opartego na Ruby.
Piękno tego rozwiązania polega na tym, że działa auto-magicznie nie tylko w przypadku ciągów, ale także w przypadku tablic i innych typów.
źródło
variable.blank? zrobię to. Zwraca prawdę, jeśli łańcuch jest pusty lub jeśli łańcuch jest zerowy.
źródło
nil?
można pominąć w kontekstach logicznych. Ogólnie można użyć tego do replikacji kodu C #:źródło
Przede wszystkim uważaj na tę metodę:
Jak mówi Jesse Ezel :
A jeśli załatasz klasę String ... upewnij się, że NilClass też nie został poprawiony !
źródło
Każda klasa ma
nil?
metodę:A stringi mają
empty?
metodę:Pamiętaj, że ciąg nie jest równy,
nil
gdy jest pusty, więc użyjempty?
metody, aby sprawdzić, czy ciąg jest pusty.źródło
Inną opcją jest konwersja zera na pusty wynik w locie:
(my_string||'').empty?
źródło
Konrad Rudolph ma właściwą odpowiedź.
Jeśli naprawdę cię to wkurza, małpuj popraw klasę String lub dodaj ją do wybranej klasy / modułu. Naprawianie łatek podstawowych obiektów naprawdę nie jest dobrą praktyką, chyba że masz naprawdę ważny powód.
Wtedy możesz to zrobić
String.nilorempty? mystring
źródło
Sprawdź puste ciągi w zwykłym języku Ruby, unikając wyjątków NameError
Jest tutaj kilka dobrych odpowiedzi, ale nie potrzebujesz ActiveSupport ani małpiego poprawiania, aby rozwiązać typowy przypadek użycia tutaj. Na przykład:
To „zrobi dobrze”, jeśli my_string ma wartość nil lub jest pustym ciągiem, ale nie zgłosi wyjątku NameError, jeśli my_string nie jest zdefiniowany. Jest to generalnie lepsze niż bardziej wymyślone:
lub jest bardziej rozwlekły, ponieważ wyjątki powinny być naprawdę zapisywane dla rzeczy, których się nie spodziewasz. W tym przypadku, chociaż może to być powszechny błąd, niezdefiniowana zmienna nie jest tak naprawdę wyjątkową okolicznością, więc należy ją odpowiednio traktować.
Twój przebieg może się różnić.
źródło
Czy próbowałeś doprecyzować?
źródło
Jeśli używasz szyn, możesz użyć
#present?
Czyli odwrotnie, aby sprawdzić użycie długości zerowej lub zerowej
!present?
źródło
W szynach możesz spróbować
#blank?
.Ostrzeżenie: da ci pozytywy, gdy ciąg składa się ze spacji:
Chciałem tylko zwrócić na to uwagę. Może odpowiada Twoim potrzebom
UPD. dlaczego w moim kanale pojawiają się stare pytania? Przepraszamy za nekroposty.
źródło
Dla golfistów kodu:
Lub jeśli nie jesteś golfistą (wymagana wersja Ruby 2.3 lub nowsza):
źródło