루비에서 문자열을 기호 가능으로 변환


241

일반적으로 기호는 다음과 같이 표시됩니다

:book_author_title

그러나 문자열이 있으면 :

"Book Author Title"

레일 / 루비에 : 원시 문자열 정규식 바꾸기를하지 않고 표기법을 사용할 수있는 기호로 변환하는 방법이 있습니까?


답변:


360

Rails ActiveSupport::CoreExtensions::String::Inflections에는 이러한 방법을 제공하는 모듈이 있습니다. 그들은 모두 볼 가치가 있습니다. 예를 들어 :

'Book Author Title'.parameterize.underscore.to_sym # :book_author_title

이것은 정말 잘 작동합니다! 날씨가 있거나 대문자 인 곳에 단어가있을 수 있습니다. 매개 변수화하면 정렬됩니다.
TheLegend

gsub를 사용하지 않고 이것을 되돌릴 수있는 방법이 있습니까?
Zack

@Zack을 사용 .to_s하고 .humanize전체 대문자를 유지하지 않으면 작업을 수행해야합니다.
Tyler Diaz

무엇이든 변환에 접근하는 좋은 방법은 작업을 수행하고 실행 취소하는 것입니다. .to_sym은 한 방향 (문자열에서 기호로)을 변환 할 수 있으며 .to_s는 (기호에서 문자열로) 변환 할 수 있습니다. 배열을 다루는 경우 모든 요소를 ​​변환하려면 .map (& : to_sym) 또는 .map (& to_s)를 고려하십시오.
jasonleonhard

2
parameterize ( '_'). to_sym은 parameterize.underscore.to_sym보다 약간 짧습니다.
IAmNaN

228

에서 : http://ruby-doc.org/core/classes/String.html#M000809

str.intern => symbol
str.to_sym => symbol

에 해당하는 Symbol을 반환하여 str이전에 존재하지 않은 심볼을 만듭니다. 참조하십시오 Symbol#id2name.

"Koala".intern         #=> :Koala
s = 'cat'.to_sym       #=> :cat
s == :cat              #=> true
s = '@cat'.to_sym      #=> :@cat
s == :@cat             #=> true

또한 :xxx표기법 으로 표현할 수없는 기호를 만드는 데 사용할 수도 있습니다 .

'cat and dog'.to_sym   #=> :"cat and dog"

그러나 당신의 예를 들어 ...

"Book Author Title".gsub(/\s+/, "_").downcase.to_sym

가야한다;)


1
훌륭한 예. 감사합니다.
Paul

8
원래 포스터는 Rails 답변에 만족했을지 모르지만이 게시물은 실제 질문에 대한 답변입니다.
Russ Bateman

2
to_sym: xxx 표기법으로 표현할 수없는 기호를 만드는 데 "[ ]를 사용할 수도 있다는 것은 사실이 아닙니다 . :'cat and dog'와 동일합니다 'cat and dog'.to_sym.
Michael Dorst

2
하나도 :"cat and dog\n on a new line"필요하지 않은 것처럼 엉뚱한 일을 할 수도 있습니다 to_sym.
Michael Dorst

3
문제는 Rails가 아닌 Ruby에서의 변환에 관한 것이 었습니다. 정답입니다.
Katarzyna



11

Rails에서는 다음 underscore방법을 사용하여이를 수행 할 수 있습니다 .

"Book Author Title".delete(' ').underscore.to_sym
=> :book_author_title

더 간단한 코드는 정규식을 사용하고 있습니다 (Ruby에서 작동).

"Book Author Title".downcase.gsub(/\s+/, "_").to_sym
=> :book_author_title

3
모든 단어가 대문자로 시작하는 경우에만 작동합니다. "my fat Dog"인 경우 : myfat_dog이 반환됩니다.
TheLegend


1

이것은 질문 자체에 답하지는 않지만이 질문은 문자열을 기호로 변환하고 해시에서 사용하는 솔루션을 검색하는 것을 발견했습니다.

hsh = Hash.new
str_to_symbol = "Book Author Title".downcase.gsub(/\s+/, "_").to_sym
hsh[str_to_symbol] = 10
p hsh
# => {book_author_title: 10}

그것이 나와 같은 누군가를 돕기를 바랍니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.