5

で配列を作成したいとしますが、省略構文["one", "two", nil]を使用して作成することは可能ですか?%w[]明らかにこれは機能しません:

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

Ruby 1.9.3

4

3 に答える 3

4

いいえ。この便利な構文の全体的な目的は、文字列リテラルと区切り文字のコンマを引用符で囲むことを避けることです。

于 2012-06-05T20:42:31.277 に答える
1

%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 に答える