Mai mult
O explicație concisă nulă v. gol v. gol în Ruby on Rails
Mă găsesc în mod repetat în căutarea pentru o definiție clară a diferențelor dintre nil?,
gol?, și
gol?` în Ruby on Rails. Aici's cel mai aproape am'am venit:
-
gol?
obiectele sunt false, gol, sau un spațiu șir. De exemplu,""
," "
,nil
,[]
, și{}
sunt goale. -
nule?` obiectele sunt instanțe ale NilClass.
-
gol?
obiecte sunt specifice fiecărei clase, și definiția diferă de la clasă la clasă. Un șir este gol dacă nu are personaje, și o matrice este goală dacă nu conține elemente.
Lipsește ceva, sau mai comparație care poate fi făcut?
1093
14
.nil?
poate fi folosit pe orice obiect si este true dacă obiectul este zero..gol?
poate fi folosit pe siruri de caractere, tablouri și hash-uri și întoarce true dacă:De funcționare
.gol? pe ceva care este zero va arunca o
NoMethodError`.Că este de unde.gol?
vine. Este [implementată de Șine][1] și va funcționa pe orice obiect, precum și de lucru ca
.gol? pe siruri de caractere, tablouri și hash-uri..gol?
, de asemenea, evaluează adevărat pe siruri de caractere care sunt non-gol, dar conține numai spații albe:Șine oferă, de asemenea,
.prezent?
, care revine la o negare a.gol?
.Array te-am prins:
gol?
va reveni "false", chiar dacă toate elemente de-o matrice sunt goale. Pentru a determina vid în acest caz, utilizați toate? " cu " gol?`, de exemplu:Am făcut acest lucru util tabel cu toate cazurile:
gol?
, `prezent? sunt furnizate de Șine.Doar extinde Julian's tabel:
Ref: gol?gol?nil?傻傻分不清楚
Sfat rapid:
!obj.gol? == obj.prezent?
Poate fi util/mai ușor de pe ochi în unele expresii
O diferență este că.nil? "și".gol?
sunt metode care sunt oferite de limbajul de programare Ruby, întrucât
.gol?` este ceva adaugat de cadru de dezvoltare web Șine.zero? "este" gol?
gol? "este" gol?
gol? "este" zero?
zero? "este" gol?
tl;dr-doar folosi
gol?
&prezent? dacă nu doriți să se facă distincția între
"" " și " " "`Un caz special este atunci când încearcă pentru a evalua dacă o valoare booleană este nulă:
În acest caz, recomandarea ar fi să-l folosiți.nil?`
Doar o mica nota despre orice?
recomandare: El's chiar că-l's *în general* echivalent cu
!gol?. Cu toate acestea, orice?
va returna "true" la un șir de doar spațiu (ala" "
).Și, desigur, a se vedea 1.9 comentariul de mai sus, de asemenea.
Don't uita de orice?
care este, în general
!gol?. În Șine eu de obicei verificați pentru prezența de ceva de la sfârșitul de o declarație cu
dacă ceva " sau " dacă ceva apoi utilizațigol?
acolo unde este nevoie, deoarece se pare să funcționeze peste tot.nil
este un standard Ruby metodă care poate fi numit pe toate obiectele și returnează "true" dacă obiectul este "zero":gol?
este un standard Ruby metodă care poate fi numit pe unele obiecte, cum ar fi Siruri de caractere, Tablouri și Hash-uri și returnează "true" dacă aceste obiecte nu conțin niciun element:gol?
nu poate fi numit "zero" obiecte.gol?
este o Șine metodă care poate fi numit pe "zero" obiecte precum și gol obiecte.Toată lumea le-a explicat bine ce este diferența.
Aș dori să adaug în Ruby On Rails, este mai bine să utilizați
obj.gol? " sau " obj.prezent? "în loc de" obj.nil? " sau " obj.gol?
.obj.gol?
se ocupă de toate tipurile de nil,
'',
[],
{}`, și returnează "true" dacă nu sunt disponibile valori și returnează "false" daca valorile sunt disponibile pe orice tip de obiect.există?
metodă poate fi utilizată pentru a verifica dacă există date în baza de date sau nu. Returnează valori booleene fie "adevărat" sau "fals".Șine 4
o alternativă la @corban-brook 's 'Matrice te-am prins: gol?' pentru a verifica dacă o matrice are doar valori goale și poate fi considerată ca martor? adevărat:
de asemenea, se poate face:
nil?
poate fi folosit pe orice obiect. Se determină dacă obiectul are vreo valoare sau nu, inclusiv 'gol' valorile.De exemplu:
Practic nule?` va mai întoarce true dacă obiectul este de fapt egal cu 'nil'.
gol?
este doar numit pe obiecte care sunt considerate o colecție. Aceasta include lucruri cum ar fi siruri de caractere (o colecție de caractere), hash-uri (o colectie de perechi cheie/valoare) și matrice (o colecție de obiecte arbitrare).gol?
returnează adevărat este că nu există elemente în colecție.De exemplu:
Observați că
gol?
poate't fi numit pe nil obiecte ca nil obiecte nu sunt o colecție și se va ridica o excepție.De asemenea, observați că, chiar dacă elementele dintr-o colecție sunt goale, aceasta nu înseamnă o colecție este gol.
gol?
este de fapt o combinație denil? " și " gol?
L's util pentru verificarea obiecte pe care le presupune sunt colecții, dar ar putea fi, de asemenea, zero.