在rails集合中放置带空格的枚举

时间:2011-04-26 03:49:41

标签: ruby

irb(main):001:0> t = %w{this is a test}
=> ["this", "is", "a", "test"]
irb(main):002:0> t.size
=> 4
irb(main):003:0> t = %w{"this is" a test}
=> ["\"this", "is\"", "a", "test"]
irb(main):004:0> t.size
=> 4

最后我预计t.size为3。

正如所建议的那样,每个空间都必须逃脱......结果证明这是一项很大的工作。还有哪些其他选择?我有一个大约30个单词的列表,我需要放入一个集合,因为我使用simple_form

将它们显示为复选框

6 个答案:

答案 0 :(得分:2)

如果您不希望该空间成为分割器,则需要使用'\'来转义空格,如t = %w{this\ is a test}

答案 1 :(得分:2)

为什么不使用普通数组,所以没有人必须在视觉上解析所有转义以找出正在发生的事情?这很清楚:

t = [
    'this is',
    'a',
    'test'
]

并且维护代码的人不会因为%w{}不合适或者因为他们没有看到您的转载空白而弄乱他们而讨厌您使用{{1}}。

答案 2 :(得分:0)

使用\

逃离空间
%w{this\ is a test}

答案 3 :(得分:0)

您可以转义空格%w{this\ is a test}以获取['this is', 'a', 'test'],但一般情况下我不会使用%w,除非此意图是在空格上拆分。

答案 4 :(得分:0)

正如其他人指出的那样,当空格是单词的分隔符时,使用%w{}构造。如果您有必须引用的项目但仍想使用该构造,则可以执行以下操作:

 > %w{a test here}.unshift("This is")  
 => ["This is", "a", "test", "here"] 

答案 5 :(得分:0)

require 'csv'
str = '"this is" a test'
p CSV.parse_line(str,{:col_sep=>' '})
#=> ["this is", "a", "test"]