Array Ruby:% w vs% W

152

Apa bedanya?

Allyn
sumber
18
"% w" adalah jawaban saya yang biasa untuk orang-orang yang terlalu sombong tentang keterbacaan Ruby. Bekerja setiap saat.
Craig Stuntz
sekarang Anda memiliki respons yang lebih baik :-)
errata
6
Sebagai catatan samping yang tidak relevan, URL untuk pertanyaan ini membingungkan saya untuk sementara waktu sementara halaman memuat.
Dana Monica's Lawsuit

Jawaban:

233

% w tanda kutip seperti tanda kutip tunggal ''(tidak ada variabel interpolasi, escape sequence lebih sedikit), sedangkan% W tanda kutip seperti tanda kutip ganda "".

irb(main):001:0> foo="hello"
=> "hello"
irb(main):002:0> %W(foo bar baz #{foo})
=> ["foo", "bar", "baz", "hello"]
irb(main):003:0> %w(foo bar baz #{foo})
=> ["foo", "bar", "baz", "\#{foo}"]
Brian Campbell
sumber
Contoh Anda juga menunjukkan tanda kutip ganda untuk% w. Apakah itu benar?
Foton
Iya. Saat mencetak output, Ruby selalu menggunakan tanda kutip ganda dan keluar dari karakter seperti #. '#{foo}'dan "\#{foo}"memberikan string yang sama, yang dapat Anda memverifikasi dengan '#{foo}' == "\#{foo}"di irb.
Brian Campbell
Ini sedikit membingungkan pada pandangan pertama, tapi terima kasih atas penjelasannya.
Foton
29

Aplikasi yang saya temukan untuk% W vs% w:

greetings = %W(hi hello #{"how do you do"})
# => ["hi", "hello", "how do you do"]
aaandre
sumber
12
Meskipun dalam hal ini, mungkin lebih mudah untuk melakukannyagreetings = %w(hi hello how\ do\ you\ do)
dinja
21

% W melakukan penggantian kutip ganda normal. % w tidak.

Brian
sumber
11

Meskipun sudah tua, pertanyaannya terus muncul dan jawabannya tidak selalu jelas bagi saya. Jadi, inilah pikiran saya.

% w dan% W adalah contoh tipe Input Pembatas Umum , yang terkait dengan Array. Ada tipe lain yang termasuk% q,% Q,% r,% x dan% i.

Perbedaan antara huruf besar dan kecil adalah memberi kita akses ke fitur kutipan tunggal dan ganda. Dengan tanda kutip tunggal dan huruf kecil% w, kami tidak memiliki interpolasi kode (mis. # {SomeCode}) dan sejumlah karakter escape yang terbatas (mis. \, \ N). Dengan tanda kutip ganda dan huruf besar% W kita lakukan memiliki akses ke fitur ini.

Pembatas yang digunakan dapat berupa karakter apa saja, bukan hanya tanda kurung terbuka. Mainkan dengan contoh di atas untuk melihat efeknya.

Untuk penulisan lengkap dengan contoh% w dan daftar lengkap, karakter dan pembatas pelarian - lihat di: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealedaled .html

Menandai

Markus C
sumber
1
Itu artikel yang bagus. Saya tidak menyadari Anda dapat membuat string atau hal-hal lain dengan cara yang sama dan karakter yang dilampirkan dapat menjadi apa pun yang Anda inginkan. Misalnya,%w&readable af&
Dex
1

%Wdigunakan untuk elemen array yang dikutip ganda seperti %Q, misalnya,

foo = "!"
%W{hello world #{foo}} # => ["hello", "world", "!"]

%wdigunakan untuk elemen array dengan kutip tunggal seperti %q.

%w(hello world #{foo})
# => ["hello","world", "\#{foo}"]
Faruk Hossen
sumber
0
array = %w(a b c d) 

Sama dengan

array = ["a", "b", "c", "d"]

%w adalah simbol jalan pintas untuk tanda kutip ke string!

Kasem007
sumber