Apakah ada notasi literal untuk berbagai simbol?

170

Saya suka ungkapan literal ini untuk serangkaian string:

%w( i can easily create arrays of words )

Saya bertanya-tanya apakah ada literal untuk mendapatkan berbagai simbol. Saya tahu saya bisa melakukannya

%w( it is less elegant to create arrays of symbols ).map( &:to_sym )

tetapi akan sangat luar biasa hanya menggunakan huruf harafiah.

m_x
sumber
Pendekatan ini akan lebih baik daripada hanya membuat array simbol? Atau metode sederhana? Ah.
Dave Newton
dalam hal ini, apa gunanya %wnotasi?
m_x
IMO array simbol sudah kurang berantakan daripada array string sudah, dan umumnya kurang umum. YMMV.
Dave Newton
<troll> sepertinya tim ruby ​​setuju dengan saya sejak ruby ​​2 ... </troll>
m_x
3
Kemungkinan duplikat dari Buat array simbol
sjakobi

Jawaban:

277

Iya! Ini dimungkinkan sekarang di Ruby 2.0.0. Salah satu cara untuk menulisnya adalah:

%i{foo bar}  # => [:foo, :bar]

Anda juga dapat menggunakan pembatas lainnya, jadi Anda juga bisa menulis %i(foo bar)atau %i!foo bar!misalnya.

Fitur ini awalnya diumumkan di sini:

http://www.ruby-lang.org/zh_TW/news/2012/11/02/ruby-2-0-0-preview1-released/

Itu disebutkan dalam dokumentasi resmi Ruby di sini:

http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings

David Grayson
sumber
3
terima kasih, @ MarcelJackwerth sudah menyatakannya dalam komentar pada jawaban yang diterima sebelumnya, tetapi saya akan menerima Anda untuk anak cucu.
m_x
3
Perhatikan bahwa seperti pengubah lainnya, dimungkinkan untuk menggunakan berbagai pembatas lainnya. misalnya %i[foo bar], %i{foo bar}, %i!foo bar!, %i%foo bar%.
user664833
1
Jika Anda ingin menyorot dukungan untuk ini di TextMate atau Sublime Text, lihat file .tmLanguage saya yang dimodifikasi di intisari ini .
Ben Kreeger
1
menurut rubocop , disarankan untuk menggunakan%i[foo bar]
Mapad
26

Di Ruby 1.x, sayangnya daftar % -delimiters yang tersedia terbatas

Modifier    Meaning
%q[ ]       Non-interpolated String (except for \\ \[ and \])
%Q[ ]       Interpolated String (default)
%r[ ]       Interpolated Regexp (flags can appear after the closing delimiter)
%s[ ]       Non-interpolated Symbol
%w[ ]       Non-interpolated Array of words, separated by whitespace
%W[ ]       Interpolated Array of words, separated by whitespace
%x[ ]       Interpolated shell command
Gareth
sumber
Sayang sekali ... terima kasih atas tautan dan daftarnya. tidak tahu %x, tampaknya lebih mudah dibaca daripada notasi backticks yang saya gunakan
m_x
3
baik, tidak begitu disayangkan bagi mereka yang hampir tidak bisa menyimpan yang ada di kepala mereka (itu adalah saya).
tokland
26
Di Ruby 2.0 kita akan mendapatkan% i untuk array simbol, lihat: ruby-lang.org/zh_TW/news/2012/11/02/…
Marcel Jackwerth