2009-03-27 9 views
129

違いは何ですか?Ruby配列:%w対%W

+13

「%w」は、Rubyの可読性についてあまりにも気が利いている人にとって、私の普通のレトルトです。毎回動作します。 –

+0

あなたはもっと良い応答を得ました:-) – errata

+4

無関係な副言として、この質問のURLは、ページが読み込まれている間私を混乱させました。 –

答えて

205

%引用符は一重引用符のように''(可変補間なし、より少ないエスケープシーケンス)、%W引用符は二重引用符のように""です。

irb(main):001:0> foo="hello" 
=> "hello" 
irb(main):002:0> %W(foo bar baz #{foo}) 
=> ["foo", "bar", "baz", "hello"] 
irb(main):003:0> %w(foo bar baz #{foo}) 
=> ["foo", "bar", "baz", "\#{foo}"] 
+0

あなたの例では、%wの二重引用符も表示しています。それが正しいか? – Foton

+0

はい。出力を出力するとき、Rubyは常に二重引用符を使用し、 '# 'のような文字をエスケープします。 '#{foo} 'と' '\#{foo}''は同じ文字列を ''#{foo} '== "\#{foo}" 'で' irb'で確認できます。 –

+0

最初は分かりにくいですが、説明に感謝します。 – Foton

19

%Wは通常の二重引用符置換を実行します。 %wはありません。

26

私は重量%で対W%を発見したアプリケーション:古いポストけれども

greetings = %W(hi hello #{"how do you do"}) 
# => ["hi", "hello", "how do you do"] 
+0

すてきなハック、ありがとう! – akuhn

+9

この場合、 'greetings =%w(hi hello how \ do \ you \ do)'を実行する方が簡単でしょう。 – dinjas

10

は、質問が来る続けると答えはいつも私に明確いないようです。だから、ここに私の考えがあります。

%wおよび%wは、配列に関連する汎用区切り入力タイプの例です。 %q、%Q、%r、%x、%iなど他のタイプもあります。

大文字と小文字の違いは、一重引用符と二重引用符の機能にアクセスできることです。一重引用符と小文字の%wを使用すると、コード補間(例:#{someCode})と動作するエスケープ文字の範囲が制限されます(\、\ nなど)。二重引用符と大文字の%Wを使用すると、にアクセスします。

使用される区切り文字には、かっこだけでなく、任意の文字を使用できます。上記の例を試してみてください。パーセント弦楽のためhttp://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed.html

マーク

1

%Wを見ている - フル、%の例ワットと完全なリストをアップ書き文字と区切り文字をエスケープするために

%Qのような二重引用符の配列要素に使用されます。たとえば、

foo = "!" 
%W{hello world #{foo}} # => ["hello", "world", "!"] 

%wは、一重引用符の配列要素には%qのように使用されます。

%w(hello world #{foo}) 
# => ["hello","world", "\#{foo}"] 
関連する問題