是否可以使用%w []简写在数组中创建nil值?

时间:2012-06-05 20:29:53

标签: ruby arrays

假设我想用["one", "two", nil]创建一个数组,是否可以使用简写%w[]语法来实现?显然这不起作用:

array = %w[one two nil]
=> ["one", "two", "nil"]
array[2].nil?
=> false

Ruby 1.9.3

3 个答案:

答案 0 :(得分:4)

没有。方便语法的全部目的是避免在字符串文字和分隔符逗号。

周围加上引号

答案 1 :(得分:1)

您可以展开%w[]数组并将nil放在:

之后
>> array = [ *%w[one two], nil, *%w[and some more words] ]
=> ["one", "two", nil, "and", "some", "more", "words"]

但这可能比单独引用字符串更嘈杂; OTOH,额外的噪音确实表明发生了奇怪的事情,所以鼓励读者仔细观察。

答案 2 :(得分:0)

只是间接的。您可以创建数组,然后使用Array#collect:

将字符串“nil”转换为实际的nil
array = %w[one two nil].collect { |v| v == 'nil' ? nil : v }