심볼 배열 만들기


130

이와 같은 작업을 수행하는 더 확실한 방법이 있습니까?

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

나는 %s내가 원하는 것을했을 것이라고 생각 했지만 그렇지 않았습니다. 그것은 대괄호 사이의 모든 것을 가져 와서 큰 상징을 만듭니다.

약간의 성가심.


1
꽤 표준입니다. 이 방법을 바람직하지 않게 만드는 구현에 대한 것이 있습니까?
dwhalen

5
"실제로"는 아니지만 Rails는 종종 이와 같은 구문 설탕을 사용하여 모든 것을 따끔 따끔 따뜻하게 느끼게합니다. :)
Drew


답변:


357

원래 답변은 '11 년 9 월에 작성되었지만 Ruby 2.0부터는 기호 배열을 만드는 더 짧은 방법이 있습니다! 이 리터럴 :

%i[address city state postal country]

당신이 원하는 것을 정확하게 할 것입니다.


3
나는 항상 "to_sym"의 대안 인 "intern"을 의미한다는 것을 잊어 버립니다. 참조 codecademy.com/forum_questions/512a675cf116c52d0d00674b
A5308Y

루비 2의 강조에 주목하십시오. 이것은 루비 프로그래밍 언어 책에는 표시되지 않습니다. 왜냐하면 1.9.3까지만 포함하기 때문입니다.
Donato

루비의 % 리터럴 구문을 사용할 때 대괄호 대신 두 개의 영숫자가 아닌 문자를 사용하는 것을 선호합니다.%i|a b c|
Epigene

6
이것이 당신이 원하는 것을하는 동안, 당신의 코드베이스에서 이것을 보는 사람은 구글이 루비가 우리에게 던진 기괴한 구문을 알아 내야합니다. 완벽하게 읽을 수있는 대안 (예 : [: address, : city, : state])이있을 때 모호한 언어 기능을 피하는 것이 좋습니다.
Alex

감사합니다. 정말 도움이됩니다.
sonnyhe2002

91

너무 문자 그대로 될 위험이 있으므로 심볼 배열을 구성하는 가장 깨끗한 방법은 심볼 배열을 사용하는 것입니다.

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

그보다 더 간결한 것은 생각할 수 없습니다.


11
"너무 리터럴"을 의미합니까?
앤드류 그림

나는 항상 가장 강력하고 간결한 일을하는 것을 찾고 사용하는 것을 좋아합니다. 이 답변은 실제로이 특정 목록의 경우보다 키 입력이 적지 만 ~ 9 개 이상의 항목 목록을 사용하면 대안이 더 짧습니다. 답변 해주셔서 감사합니다. :)
Drew

4
이 경우 가독성이 모두 뛰어납니다. 이 답변은 % w / to_sym 대안보다 훨씬 더 읽기 쉬운 (IMO)입니다. 다음 개발자가 당신의 물건을 인계 받도록 만들지 마십시오.
Bruce Hubbard

3

%i[ ] 공백으로 분리 된 보간되지 않은 기호 배열 (루비 2.0 이후)

%I[ ] 공백으로 분리 된 보간 된 기호 배열 (루비 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.