2013-04-13 13 views
69

Próbuję ustawić warunek warunkowo w Ruby. Muszę ustawić, jeśli zmienna jest zerowa lub pusta (ciąg długości 0). Wymyśliłem:Testowanie pustego lub zerowego łańcucha znaków

variable = id if variable.nil? || (!variable.nil? && variable.empty?) 

Chociaż działa, nie wydaje mi się bardzo podobny do rubinu. Czy jest to bardziej zwięzły sposób wyrażania powyższych?

+0

z „Ruby sposób” byłoby nie dostać się do stanu, w którym masz mieszankę Nils i pusty smyczki. Jeśli jakaś funkcja zwraca, dane mogą zwracać "pustą" wartość, powinna zwracać 'nil', a nie' "". – meagar

Odpowiedz

140

Druga klauzula nie wymaga sprawdzenia, jeśli !variable.nil? sprawdza się, jeśli variable.nil ma wartość false (z powodu short-circuiting).

To powinno wystarczyć:

variable = id if variable.nil? || variable.empty? 

Jeśli pracujesz z Ruby on Rails, Object.blank? rozwiązuje dokładnie ten problem:

obiekt jest pusty, jeśli jest fałszywy, pusty lub ciąg białych znaków. Na przykład: "", " ", nil, [] i {} są puste.

+4

Idealne, tego właśnie potrzebowałem ('Object.blank'). Ruby i Rails zawsze mnie zadziwiają, to zen jak prostota. Dzięki! :) –

+0

To rozwiązanie nie działałoby dla 'zmienna = 3 p zmienna = 5 jeśli zmienna.nil? || variable.empty? ' –

+1

Zakłada, że ​​@RichardBrown nie umieszcza liczby całkowitej w tym, co spodziewa się być zmienną łańcuchową, tak. –

15
variable = id if variable.to_s.empty? 
40

Jeśli jesteś w Rails .blank? powinna być metoda szukasz:

a = nil 
b = [] 
c = "" 

a.blank? #=> true 
b.blank? #=> true 
c.blank? #=> true 

d = "1" 
e = ["1"] 

d.blank? #=> false 
e.blank? #=> false 

Więc odpowiedzią byłoby:

variable = id if variable.blank? 
Powiązane problemy