2011-09-08 17 views
106

Có cách nào sạch hơn để làm điều gì đó như thế này không?Tạo một mảng các ký hiệu

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

Tôi có thể đã tìm được %s sẽ làm những gì tôi muốn nhưng không. Nó chỉ mất tất cả mọi thứ giữa các dấu ngoặc và làm cho một biểu tượng lớn ra khỏi nó.

Chỉ cần một chút phiền toái.

+0

'dir là gì ty 'về điều này? –

+1

Đó là tiêu chuẩn khá. Có bất cứ điều gì về việc thực hiện của bạn mà làm cho phương pháp này không mong muốn? – dwhalen

+4

Không "thực sự" nhưng Rails thường có đường cú pháp như thế này khiến tôi cảm thấy ấm áp hơn khi sử dụng. :) – Drew

Trả lời

309

Tôi đã viết câu trả lời gốc vào tháng 9 '11, nhưng starting from Ruby 2.0 có một cách ngắn hơn để tạo một mảng biểu tượng! Chữ này:

%i(address city state postal country) 

thực hiện chính xác những gì bạn muốn.

+0

Tuyệt vời! Hình như một cái gì đó như thế này sẽ xuất hiện cuối cùng. – Drew

+7

Chỉ cần cập nhật, phần IS này của Ruby 2.0.0 –

+3

Tôi luôn luôn quên rằng nó là viết tắt của "thực tập" thay thế cho "to_sym". Xem http://www.codecademy.com/forum_questions/512a675cf116c52d0d00674b – A5308Y

82

Với nguy cơ trở nên quá theo nghĩa đen, tôi nghĩ cách sạch nhất để xây dựng một mảng biểu tượng là sử dụng một mảng biểu tượng.

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

Không thể nghĩ ra bất kỳ điều gì ngắn gọn hơn thế.

+4

+1, đơn giản và thẳng vào vấn đề. –

+9

Bạn có nghĩa là "quá nghĩa đen" không? –

+0

Tôi luôn thích tìm và sử dụng những cách mạnh mẽ và ngắn gọn nhất để làm việc. Câu trả lời này thực sự là ít tổ hợp phím hơn tôi cho danh sách cụ thể này nhưng với một danh sách ~ 9 hoặc nhiều mục hơn, một lựa chọn thay thế sẽ ngắn hơn. Cảm ơn câu trả lời. :) – Drew

0

%i[ ] Mảng không nội suy các biểu tượng, cách nhau bằng khoảng trắng (sau của Ruby 2,0)

%I[ ] Mảng nội suy các biểu tượng, cách nhau bằng khoảng trắng (sau của Ruby 2,0)

%i[address city state postal country]

cách sạch để làm điều này là:

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

Các vấn đề liên quan