2009-10-31 15 views
103

Czy są jakieś wskazówki, jak rozróżnić między .nil?, .blank? i .empty??Kiedy stosować zero, puste, puste?

Generalnie zawsze mam wątpliwości, kiedy je stosować w mojej aplikacji, ponieważ wszystkie one mają na myśli to samo, ale mają różne znaczenia.

Czy ktoś ma jakąś kartkę na temat oszustwa?

Odpowiedz

163
  • nil? - sprawdza, czy zmienna jest odwołanie do obiektu, czy nie

  • empty? - może być użyty do sprawdzenia się na różnych typach obiektów jak empty string "" lub empty array []

  • blank? - kontrole dla nil? lub empty?.

+3

Łańcuch zawierający tylko "puste" znaki jest uważany za "pusty?", Ale nie "pusty?", Np. "\ n \ t" – xhh

+2

Blank również zwraca wartość true, jeśli obiekt ma wartość false – riley

+0

Myślę, że opis 'nil' jest niedokładny, ponieważ' nil.nil? 'jest prawdziwe, ale' nil' jest obiektem 'NilClass '. –

5

znalazłem dobre wyjaśnienie here:

zero? sprawdza, czy obiekt jest dokładnie równy zeru, czyli czy jest to jedno i jedyne wymaganie instancji NilClass.

pusty? to metoda, na którą reagują niektóre obiekty . Musisz sprawdzić dokumentację dla każdego przypadku. Dla przykładu: i pusta tablica to taka, która nie jest zerowa (jest to tablica w prawo?), A nie ma żadnych elementów. Pusty ciąg to taki, który nie jest zerowy (jest to ciąg prawo?) I nie ma bajtów, nic.

Puste? Metoda, o którą pytasz, nie należy do należącej do Ruby, jest rozszerzeniem Rails : http://api.rubyonrails.com/classes/Object.html#M000011.

Jeśli kliknięciu w link na końcu tego postu można zauważyć, że metoda blank? prostu łączy nil? i empty? wywołań metod.

+0

'String zawierające tylko„puste”znaków jest traktowane jako puste? ale nie puste ?, np. "\ n \ t" ', jako [@xhh] (http://stackoverflow.com/questions/1654960/when-to-use-nil-blank-empty#comment21296385_1655001) napisał w innej odpowiedzi na to pytanie. – ANeves

6
  • nil? jest określona na wszystkich Objects, tylko zwraca true na nil Singleton.

  • blank? jest określona na wszystkich obiektach też zwraca true jeśli obiekt jest również odpowiedzią empty? i jest pusty, czy jest wartością false typ (!object jest zawsze true).

  • empty? jest zdefiniowany na kilka obiektów kolekcji i jest true, jeśli nie ma żadnych elementów. Jest również zdefiniowany na String.

nuta że blank? jest ActiveSupport a nie w Rails 1.8.

168

Tutaj zrobiłem ten użyteczny stolik z wszystkich przypadkach enter image description here

+10

Ten stół jest doskonały - dzięki za udostępnienie! – BTHarris

+2

To naprawdę przydatne. Dzięki! – Linus

+2

Bravo, Juliane :) –

Powiązane problemy