Tạo mảng ký hiệu


130

Có cách nào sạch hơn để làm một cái gì đó như thế này?

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

Tôi đã có thể hình dung %ssẽ làm những gì tôi muốn, nhưng nó không. Nó chỉ lấy mọi thứ giữa các dấu ngoặc và tạo một biểu tượng lớn từ nó.

Chỉ là một phiền toái nhỏ.


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

5
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 khi sử dụng. :)
vẽ

kể từ ruby ​​2, có! xem stackoverflow.com/questions/8816877/
Mạnh

Câu trả lời:


357

Câu trả lời ban đầu được viết lại vào tháng 9 năm11, nhưng, bắt đầu từ Ruby 2.0 , có một cách ngắn hơn để tạo ra một loạt các biểu tượng! Nghĩa đen này:

%i[address city state postal country]

sẽ làm chính xác những gì bạn muốn.


3
Tôi luôn quên rằng nó là viết tắt của "intern" thay thế cho "to_sym". Xem codecademy.com/forum_questions/512a675cf116c52d0d00674b
A5308Y

Lưu ý sự nhấn mạnh của ruby ​​2. Điều này không được hiển thị trong sách Ngôn ngữ lập trình Ruby vì nó chỉ bao gồm tối đa 1.9.3.
Donato

Khi sử dụng cú pháp% bằng chữ của ruby, tôi thích sử dụng hai ký tự không chữ và số thay cho dấu ngoặc, tức là%i|a b c|
Epigene

6
Trong khi điều này thực hiện những gì bạn muốn, bất kỳ ai nhìn thấy điều này trong cơ sở mã của bạn sẽ phải truy cập Google để tìm ra cú pháp kỳ quái mà Ruby đã ném vào chúng tôi lần này. Tôi đặc biệt khuyên bạn nên tránh các tính năng ngôn ngữ tối nghĩa khi tồn tại các lựa chọn thay thế hoàn toàn có thể đọc được, tức là [: address ,: city ,: state].
Alex

Cảm ơn điều này thực sự hữu ích.
sonnyhe2002

91

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

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

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


11
Bạn có nghĩa là "quá nghĩa đen"?
Andrew Grimm

Tôi luôn thích tìm kiếm và sử dụng những cách làm việc mạnh mẽ và súc tích nhất. Câu trả lời này thực sự ít nhấn phím hơn so với của tôi cho danh sách cụ thể này nhưng với danh sách ~ 9 mục trở lên, một sự thay thế sẽ ngắn hơn. Cảm ơn câu trả lời. :)
vẽ

4
Tôi nghĩ rằng khả năng đọc vượt qua tất cả trong trường hợp này. Câu trả lời này rất dễ đọc (IMO) hơn so với thay thế% w / to_sym. Đừng làm cho nhà phát triển tiếp theo tiếp quản công cụ của bạn muốn đấm vào cổ họng bạn.
Bruce Hubbard

3

%i[ ] Mảng biểu tượng không nội suy, được phân tách bằng khoảng trắng (sau Ruby 2.0)

%I[ ] Mảng biểu tượng được nội suy, phân tách bằng khoảng trắng (sau Ruby 2.0)

%i[address city state postal country]

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

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

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.