で配列を作成したいとしますが、省略構文["one", "two", nil]
を使用して作成することは可能ですか?%w[]
明らかにこれは機能しません:
array = %w[one two nil]
=> ["one", "two", "nil"]
array[2].nil?
=> false
Ruby 1.9.3
いいえ。この便利な構文の全体的な目的は、文字列リテラルと区切り文字のコンマを引用符で囲むことを避けることです。
%w[]
配列をスプラットし、nil
後に置くことができます:
>> array = [ *%w[one two], nil, *%w[and some more words] ]
=> ["one", "two", nil, "and", "some", "more", "words"]
ただし、文字列を個別に引用するよりもノイズが多い場合があります。OTOH、余分なノイズは何か奇妙なことが起こっていることを示しているので、読者はもっとよく見るように勧められます。
間接的にのみ。配列を作成してから、Array#collectを使用して文字列"nil"を実際のnilに変換できます。
array = %w[one two nil].collect { |v| v == 'nil' ? nil : v }