สร้างอาร์เรย์ของสัญลักษณ์


130

มีวิธีที่สะอาดกว่านี้ไหมในการทำสิ่งนี้

%w[address city state postal country].map(&:to_sym) 
#=> [:address, :city, :state, :postal, :country]

ฉันคิดว่า%sจะได้ทำในสิ่งที่ฉันต้องการ แต่มันไม่ทำ ใช้เวลาทุกอย่างอยู่ระหว่างวงเล็บและสร้างสัญลักษณ์ขนาดใหญ่หนึ่งสัญลักษณ์ออกมา

เพียงแค่ความรำคาญเล็กน้อย


1
เป็นมาตรฐานที่ดี มีอะไรเกี่ยวกับการใช้งานของคุณที่ทำให้วิธีนี้ไม่เป็นที่ต้องการหรือไม่?
dwhalen

5
ไม่ใช่ "จริงๆ" แต่ Rails มักจะมีน้ำตาลสังเคราะห์แบบนี้ซึ่งทำให้ฉันรู้สึกอบอุ่นภายในโดยใช้ :)
Drew

ตั้งแต่ทับทิม 2 นั่นเอง! ดูstackoverflow.com/questions/8816877/…
m_x

คำตอบ:


357

คำตอบเดิมถูกเขียนขึ้นในเดือนกันยายน '11 แต่เริ่มจาก Ruby 2.0มีวิธีที่สั้นกว่าในการสร้างอาร์เรย์ของสัญลักษณ์! ตัวอักษรนี้:

%i[address city state postal country]

จะทำในสิ่งที่คุณต้องการ


3
ฉันมักจะลืมไปว่ามันย่อมาจาก "intern" ทางเลือกหนึ่งของ "to_sym" ดูcodecademy.com/forum_questions/512a675cf116c52d0d00674b
A5308Y

หมายเหตุความสำคัญของ Ruby 2 สิ่งนี้ไม่ได้แสดงไว้ในหนังสือ Ruby Programming Language เพราะครอบคลุมถึง 1.9.3 เท่านั้น
Donato

เมื่อใช้ไวยากรณ์ตามตัวอักษร% ของทับทิมฉันต้องการใช้อักขระที่ไม่ใช่ตัวเลขและตัวอักษรสองตัวแทนวงเล็บเช่น%i|a b c|
Epigene

6
ในขณะที่สิ่งนี้ทำในสิ่งที่คุณต้องการทุกคนที่เห็นสิ่งนี้ใน codebase ของคุณจะต้องไปที่ Google เพื่อดูว่า Ruby ไวยากรณ์ที่แปลกประหลาดได้โยนอะไรมาให้เราในครั้งนี้ ฉันขอแนะนำอย่างยิ่งให้หลีกเลี่ยงคุณลักษณะของภาษาที่คลุมเครือเมื่อมีทางเลือกอื่นที่อ่านได้อย่างสมบูรณ์เช่น [: address,: city,: state]
Alex

ขอบคุณสิ่งนี้มีประโยชน์จริงๆ
sonnyhe2002

91

ด้วยความเสี่ยงที่จะกลายเป็นตัวอักษรมากเกินไปฉันคิดว่าวิธีที่สะอาดที่สุดในการสร้างสัญลักษณ์อาร์เรย์คือการใช้อาร์เรย์ของสัญลักษณ์

fields = [:address, :city, :state, :postal, :country]

คิดอะไรที่รวบรัดกว่านั้นไม่ได้


11
คุณหมายถึง "ตามตัวอักษร" หรือเปล่า
Andrew Grimm

ฉันมักจะชอบค้นหาและใช้วิธีที่ทรงพลังและรัดกุมที่สุดในการทำสิ่งต่างๆ คำตอบนี้คือการกดแป้นพิมพ์น้อยกว่าของฉันสำหรับรายการนี้โดยเฉพาะ แต่มีรายการ ~ 9 รายการขึ้นไปทางเลือกอื่นจะสั้นกว่า ขอบคุณสำหรับคำตอบ. :)
Drew

4
ฉันคิดว่าความสามารถในการอ่านสูงกว่าทั้งหมดในกรณีนี้ คำตอบนี้สามารถอ่านได้ (IMO) มากกว่าทางเลือก% w / to_sym อย่าทำให้นักพัฒนาคนต่อไปเข้ามาแย่งชิงสิ่งของของคุณต้องการจะชกคุณที่คอ
Bruce Hubbard

3

%i[ ] อาร์เรย์ของสัญลักษณ์ที่ไม่ถูกแก้ไขคั่นด้วยช่องว่าง (หลัง Ruby 2.0)

%I[ ] Interpolated Array ของสัญลักษณ์คั่นด้วยช่องว่าง (หลัง Ruby 2.0)

%i[address city state postal country]

วิธีที่สะอาดที่สุดคือ:

%w[address city state postal country].map(&:to_sym)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.