5

假设我想创建一个带有 的数组,是否可以使用速记语法["one", "two", nil]来做到这一点?%w[]显然这不起作用:

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

红宝石 1.9.3

4

3 回答 3

4

不。这种方便语法的全部目的是避免在字符串文字和分隔符逗号周围加上引号。

于 2012-06-05T20:42:31.277 回答
1

你可以 splat%w[]数组并把它放在nil后面:

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

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

于 2012-06-05T20:56:12.060 回答
0

只是间接的。您可以创建数组,然后使用 Array#collect 将字符串“nil”转换为实际的 nil:

array = %w[one two nil].collect { |v| v == 'nil' ? nil : v }
于 2012-06-05T20:53:44.247 回答