มีสัญกรณ์ที่แท้จริงสำหรับชุดของสัญลักษณ์หรือไม่?


170

ฉันชอบการแสดงออกที่แท้จริงนี้สำหรับอาร์เรย์ของสตริง:

%w( i can easily create arrays of words )

ฉันสงสัยว่ามีตัวอักษรที่จะได้รับสัญลักษณ์มากมาย ฉันรู้ว่าฉันสามารถทำ

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

แต่มันวิเศษมากที่จะใช้ตัวอักษร


วิธีการนี้จะดีกว่าการสร้างสัญลักษณ์มากมาย? หรือวิธีง่ายๆ Meh
เดฟนิวตัน

ในกรณีนี้อะไรคือสิ่งที่ชี้ไปที่%wสัญกรณ์?
m_x

IMO อาเรย์ของสัญลักษณ์มีความยุ่งเหยิงน้อยกว่าอาเรย์ของสตริงที่มีอยู่แล้วและโดยทั่วไปมักจะน้อยกว่า YMMV
เดฟนิวตัน

<troll> ดูเหมือนว่าทีมทับทิมเห็นด้วยกับฉันตั้งแต่ทับทิม 2 ... </troll>
m_x

3
ซ้ำซ้อนที่เป็นไปได้ของการสร้างอาร์เรย์ของสัญลักษณ์
sjakobi

คำตอบ:


277

ใช่ นี่เป็นไปได้ใน Ruby 2.0.0 วิธีหนึ่งในการเขียนคือ:

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

คุณยังสามารถใช้ตัวคั่นอื่นดังนั้นคุณสามารถเขียน%i(foo bar)หรือ%i!foo bar!ยกตัวอย่างเช่น

สถานที่นี้มีการประกาศในขั้นต้นที่นี่:

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

มันถูกกล่าวถึงในเอกสารทางการของ Ruby ที่นี่:

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


3
ขอบคุณ @ MarcelJackwerth ได้ระบุไว้ในความคิดเห็นของคำตอบที่ได้รับการยอมรับก่อนหน้านี้ แต่ฉันจะยอมรับของคุณสำหรับลูกหลาน
m_x

3
โปรดทราบว่าเช่นเดียวกับตัวดัดแปลงอื่น ๆ มันเป็นไปได้ที่จะใช้ช่วงของตัวคั่นอื่น เช่น%i[foo bar], %i{foo bar}, ,%i!foo bar! %i%foo bar%
664833

1
หากคุณต้องการเน้นการสนับสนุนสำหรับสิ่งนี้ใน TextMate หรือ Sublime Text ให้ตรวจสอบไฟล์. tmLanguage ที่แก้ไขในส่วนนี้
Ben Kreeger

1
ตามrubocopจะแนะนำให้ใช้%i[foo bar]
Mapad

26

ใน Ruby 1.x น่าเสียดายที่รายการ% -delimiters ที่มีให้นั้นมี จำกัด

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

แย่เกินไป ... ขอบคุณสำหรับลิงค์และรายการ ไม่ทราบ%xดูเหมือนจะอ่านได้มากกว่าสัญกรณ์
Backticks ที่

3
ดีไม่น่าเสียดายสำหรับคนที่แทบจะไม่สามารถเก็บของที่มีอยู่ในหัวของพวกเขา (นั่นจะเป็นฉัน)
tokland

26
ใน Ruby 2.0 เราจะได้รับ% i สำหรับอาร์เรย์สัญลักษณ์ดู: ruby-lang.org/zh_TW/news/2012/11/02/…
Marcel Jackwerth
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.