Pertanyaan Penjelasan singkat dari nil v. Empty v. Blank di Ruby on Rails


Saya menemukan diri saya berulang kali mencari definisi yang jelas tentang perbedaan nil?, blank?, dan empty? di Ruby on Rails. Inilah yang paling dekat saya datang:

  • blank? objek adalah string palsu, kosong, atau putih. Sebagai contoh, "", " ", nil, [], dan {} kosong.

  • nil? objek adalah contoh NilClass.

  • empty? objek bersifat khusus-kelas, dan definisi bervariasi dari kelas ke kelas. String kosong jika tidak memiliki karakter, dan sebuah array kosong jika tidak mengandung item.

Adakah sesuatu yang hilang, atau perbandingan yang lebih ketat yang dapat dilakukan?


953
2018-05-19 22:51


asal


Jawaban:


.nil? bisa digunakan pada objek apa saja dan benar jika objeknya nihil.

.empty? dapat digunakan pada string, array dan hash dan mengembalikan nilai true jika:

  • Panjang string == 0
  • Panjang array == 0
  • Panjang hash == 0

Lari .empty? pada sesuatu yang nil akan melempar NoMethodError.

Di situlah tempatnya .blank? datang. Ini diimplementasikan oleh Rails dan akan beroperasi pada objek apa pun seperti halnya pekerjaan .empty? pada string, array dan hash.

nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false

.blank? juga mengevaluasi true pada string yang tidak kosong tetapi hanya berisi spasi:

"  ".blank? == true
"  ".empty? == false

Rel juga menyediakan  .present?, yang mengembalikan negasi .blank?.

Array gotcha: blank? akan kembali false bahkan jika semuanya elemen dari array kosong. Untuk menentukan kosong dalam hal ini, gunakan all? dengan blank?, sebagai contoh:

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true 

1276
2018-05-20 16:14



Saya membuat tabel yang berguna ini dengan semua kasus:

enter image description here


581
2017-12-18 16:29



Bagikan saja tabel Julian:

enter image description here

Ref: kosong? kosong? nil? 傻傻 分不清楚


173
2017-11-12 00:20



Kiat cepat: !obj.blank? == obj.present?

Dapat berguna / lebih mudah pada mata dalam beberapa ekspresi


56
2017-07-13 11:33



Satu perbedaannya adalah itu .nil? dan .empty? adalah metode yang disediakan oleh bahasa pemrograman Ruby, sedangkan .blank? adalah sesuatu ditambahkan oleh kerangka pengembangan web Rails.


43
2018-05-19 23:42



Kasus khusus adalah ketika mencoba menilai apakah nilai boolean nol:

false.present? == false
false.blank? == true
false.nil? == false

Dalam hal ini rekomendasi akan digunakan .nil?


9
2017-11-14 13:56



Hanya sedikit catatan tentang any? rekomendasi: Dia benar umumnya setara dengan !empty?. Namun, any? akan kembali true ke string hanya whitespace (ala " ").

Dan tentu saja, lihat komentar 1,9 di atas juga.


8
2017-07-13 19:25



enter image description here

  • Semuanya itu nil? aku s blank?
  • Semuanya itu empty? aku s blank?
  • Tidak ada itu empty? aku s nil?
  • Tidak ada itu nil? aku s empty?

tl; dr - hanya digunakan blank? & present? kecuali Anda ingin membedakannya "" dan " "


8
2018-01-15 18:17