Saya sedang melihat dokumentasi untuk FileUtils.
Saya bingung dengan baris berikut:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
Apa %w
artinya? Bisakah Anda mengarahkan saya ke dokumentasi?
%w(foo bar)
adalah jalan pintas untuk ["foo", "bar"]
. Artinya adalah notasi untuk menulis array string yang dipisahkan oleh spasi alih-alih koma dan tanpa tanda kutip di sekitarnya. Anda dapat menemukan daftar cara menulis literal di quickref zenspider .
%w(ab\ c def) # => ["ab c", "def"]
Saya anggap
%w()
sebagai "susunan kata" - elemen dibatasi oleh spasi dan mengembalikan susunan string.Ada% literal lainnya:
%r()
adalah cara lain untuk menulis ekspresi reguler.%q()
adalah cara lain untuk menulis string yang dikutip tunggal (dan bisa multi-baris, yang berguna)%Q()
memberikan string yang dikutip ganda%x()
adalah perintah shell%i()
memberikan array simbol (Ruby> = 2.0.0)%s()
berubahfoo
menjadi simbol (:foo
)Saya tidak tahu yang lain, tapi mungkin ada beberapa yang bersembunyi di sana ...
sumber
%i()
untuk menghasilkan lambang simbol.%()
(atau%[]
atau%{}
) yang memberikan string dikutip ganda dan lolos dari kutipan ganda, seperti%Q()
. Misalnya%("sender name" <[email protected]>) # => "\"sender name\" <[email protected]>"
Ada juga
%s
yang memungkinkan Anda membuat simbol apa saja, misalnya:Sejak Ruby 2.0.0 Anda juga memiliki:
sumber
%W
dan%w
memungkinkan Anda untuk membuat Array string tanpa menggunakan tanda kutip dan koma.sumber
Meskipun ini adalah posting lama, pertanyaannya terus muncul dan jawabannya tidak selalu jelas bagi saya, jadi, inilah pikiran saya:
%w
dan%W
merupakan contoh tipe Input Terbatas Umum , yang terkait dengan Array. Ada jenis lain yang meliputi%q
,%Q
,%r
,%x
dan%i
.Perbedaan antara versi huruf besar dan kecil adalah bahwa ia memberi kita akses ke fitur tanda kutip tunggal dan ganda. Dengan tanda kutip tunggal dan (huruf kecil)
%w
, kami tidak memiliki interpolasi kode (#{someCode}
) dan sejumlah karakter pelarian yang berfungsi (\\
,\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 melarikan diri dan pembatas, lihat " Ruby -% w vs% W - rahasia terungkap! "sumber
Alih-alih
%w()
sebaiknya kita gunakan%w[]
Menurut panduan gaya Ruby:
Pilih% w ke sintaks array literal saat Anda membutuhkan array kata (string tidak kosong tanpa spasi dan karakter khusus di dalamnya). Terapkan aturan ini hanya untuk array dengan dua elemen atau lebih.
Gunakan kawat gigi yang paling sesuai untuk berbagai jenis persen literal.
[]
untuk literal array (%w, %i, %W, %I
) karena disejajarkan dengan literal array standar.Untuk lebih lanjut baca di sini .
sumber
Dikutip dari dokumentasi untuk Perscent Strings di http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :
sumber
Saya diberi banyak kolom dari spreadsheet CSV berisi nama lengkap pengguna dan saya perlu menjaga formatnya, dengan spasi. Cara termudah yang saya temukan untuk menggunakannya saat menggunakan ruby adalah dengan melakukannya:
Sorotan ini yang
%()
membuat string seperti"Porter Smith\nJimmyJones\nRonald Jackson"
dan untuk mendapatkan array Andasplit
string di"\n"
["Porter Smith", "Jimmy Jones", "Ronald Jackson"]
Jadi untuk menjawab pertanyaan asli OP juga, mereka bisa menulis
%(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')
jika kebetulan adaspace
ketika Anda inginspace
ada di output array akhir.sumber