在Ruby中将字符串转换为符号

Chr*_*her 226 ruby ruby-on-rails

符号通常表示为这样

:book_author_title
Run Code Online (Sandbox Code Playgroud)

但如果我有一个字符串:

"Book Author Title"
Run Code Online (Sandbox Code Playgroud)

在rails/ruby​​中是否有内置的方式将其转换为符号,我可以使用: 符号而不仅仅执行原始字符串正则表达式替换?

Pri*_*iit 340

Rails得到ActiveSupport::CoreExtensions::String::Inflections了提供这种方法的模块.他们都值得一看.对于你的例子:

'Book Author Title'.parameterize.underscore.to_sym # :book_author_title
Run Code Online (Sandbox Code Playgroud)

  • parameterize('_').to_sym 比 parameterize.underscore.to_sym 短一点。 (3认同)

zze*_*roo 223

来自:http://ruby-doc.org/core/classes/String.html#M000809

str.intern => symbol
str.to_sym => symbol
Run Code Online (Sandbox Code Playgroud)

返回对应str的符号,如果以前不存在则创建符号.见Symbol#id2name.

"Koala".intern         #=> :Koala
s = 'cat'.to_sym       #=> :cat
s == :cat              #=> true
s = '@cat'.to_sym      #=> :@cat
s == :@cat             #=> true
Run Code Online (Sandbox Code Playgroud)

这也可用于创建无法使用:xxx表示法表示的符号.

'cat and dog'.to_sym   #=> :"cat and dog"
Run Code Online (Sandbox Code Playgroud)

但是对于你的例子......

"Book Author Title".gsub(/\s+/, "_").downcase.to_sym
Run Code Online (Sandbox Code Playgroud)

应该去 ;)

  • 原始海报可能对Rails答案感到满意,但这篇文章回答了实际问题. (8认同)
  • 问题是关于Ruby的转换,而不是Rails.这是一个正确的答案. (3认同)
  • "[to_sym`]也可用于创建无法使用:xxx表示法表示的符号".`:'cat and dog'`与''cat and dog'.to_sym`相同. (2认同)
  • 人们甚至可以做一些古怪的事情,比如`:"cat and dog \n on new line"`而不需要`to_sym`. (2认同)

小智 23

"Book Author Title".parameterize('_').to_sym
=> :book_author_title
Run Code Online (Sandbox Code Playgroud)

http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-parameterize

parameterize是一个rails方法,它允许您选择分隔符的内容.默认情况下它是短划线" - ".


Jul*_*ins 14

intern→symbol返回与str对应的Symbol,如果以前不存在则创建该符号

"edition".intern # :edition
Run Code Online (Sandbox Code Playgroud)

http://ruby-doc.org/core-2.1.0/String.html#method-i-intern


Cha*_*tni 11

在Rails中,您可以使用以下underscore方法执行此操作:

"Book Author Title".delete(' ').underscore.to_sym
=> :book_author_title
Run Code Online (Sandbox Code Playgroud)

更简单的代码使用正则表达式(与Ruby一起使用):

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

  • 这只有在所有单词都以大写字母开头的情况下才有效,如果它是"我的胖狗",它将返回:myfat_dog. (3认同)

小智 9

这是你在找什么?:

:"Book Author Title"
Run Code Online (Sandbox Code Playgroud)

:)