Có một ký hiệu theo nghĩa đen cho một mảng các biểu tượng?


170

Tôi thích biểu thức nghĩa đen này cho một chuỗi các chuỗi:

%w( i can easily create arrays of words )

Tôi tự hỏi nếu có một nghĩa đen để có được một loạt các biểu tượng. Tôi biết tôi có thể làm

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

nhưng nó sẽ là tuyệt vời chỉ để sử dụng một nghĩa đen.


Cách tiếp cận này sẽ đẹp hơn là chỉ tạo ra một loạt các biểu tượng? Hay một phương pháp đơn giản? Meh.
Dave Newton

trong trường hợp này, những gì thậm chí chỉ đến %wký hiệu?
m_x

IMO một mảng các ký hiệu ít lộn xộn hơn một chuỗi các chuỗi đã có, và thường ít phổ biến hơn. YMMV.
Dave Newton

<troll> có vẻ như nhóm ruby ​​đã đồng ý với tôi kể từ ruby ​​2 ... </ troll>
m_x

3
Bản sao có thể có của Tạo mảng ký hiệu
sjakobi

Câu trả lời:


277

Đúng! Điều này hiện có thể có trong Ruby 2.0.0. Một cách để viết nó là:

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

Bạn cũng có thể sử dụng các dấu phân cách khác, vì vậy bạn cũng có thể viết %i(foo bar)hoặc%i!foo bar! ví dụ.

Tính năng này ban đầu được công bố tại đây:

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

Nó được đề cập trong tài liệu chính thức của Ruby ở đây:

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


3
cảm ơn, @ MarcelJackwerth đã nêu nó trong một bình luận về câu trả lời được chấp nhận trước đó, nhưng tôi sẽ chấp nhận bạn cho hậu thế.
m_x

3
Lưu ý rằng như với các sửa đổi khác, có thể sử dụng một loạt các dấu phân cách khác. ví dụ như %i[foo bar], %i{foo bar}, %i!foo bar!, %i%foo bar%.
user664833 6/214

1
Nếu bạn muốn làm nổi bật hỗ trợ cho điều này trong TextMate hoặc Sublime Text, hãy xem tệp .tmL Language đã sửa đổi của tôi trong ý chính này .
Ben Kreeger

1
Theo rubocop , nên sử dụng%i[foo bar]
Mapad

26

Trong Ruby 1.x, thật không may, danh sách % -d Friiter có sẵn bị giới hạn

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

quá tệ ... cảm ơn vì liên kết và danh sách, mặc dù. không biết %x, dường như dễ đọc hơn ký hiệu backticks tôi sử dụng
m_x

3
tốt, không quá đáng tiếc cho những người hầu như không thể giữ những cái hiện có trong đầu (đó sẽ là tôi).
tokland

26
Trong Ruby 2.0, chúng tôi sẽ nhận được% i cho các mảng ký hiệu, xem: ruby-lang.org/zh_TW/news/2012/11/02/ Kẻ
Marcel Jackwerth
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.