Ruby配列:%wと%W


152

違いはなんですか?


18
"%w"は、Rubyの読みやすさについて少し生意気すぎる人に対する私のいつものレトルトです。毎回動作します。
Craig Stuntz 2009年

今、あなたはより良い応答を持っています:-)
正誤表

6
無関係な補足として、この質問のURLは、ページの読み込み中にしばらく混乱しました。
ファンドモニカの訴訟

回答:


233

%wは一重引用符のように引用します''(変数補間なし、エスケープシーケンスが少ない)、%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}"]

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

はい。出力を印刷するとき、Rubyは常に二重引用符を使用し、などの文字をエスケープします#'#{foo}'そして"\#{foo}"あなたがして確認することができ、同じ文字列を、与える'#{foo}' == "\#{foo}"中をirb
ブライアンキャンベル

初めて見たときは少し混乱しますが、説明してくれてありがとう。
Foton

29

%Wと%wで見つけたアプリケーション:

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

12
この場合、それを行う方が簡単ですgreetings = %w(hi hello how\ do\ you\ do)
dinjas 14


11

古い投稿ですが、質問が増え続け、答えが常にはっきりとはわかりません。だから、ここに私の考えです。

%wと%Wは、配列に関連する一般的な区切られた入力タイプの例です。%q、%Q、%r、%x、%iを含む他のタイプがあります。

大文字と小文字の違いは、単一引用符と二重引用符の機能にアクセスできることです。単一引用符と小文字の%wを使用すると、コードの補間(#{someCode}など)がなく、機能するエスケープ文字の範囲が限定されます(\、\ nなど)。二重引用符と大文字%で、私たちは、W これらの機能へのアクセス権を持っています。

使用される区切り文字は、左括弧だけでなく、任意の文字にすることができます。上記の例を試して、効果があることを確認してください。

%wの例と完全なリスト、エスケープ文字と区切り文字を含む完全な説明については、http//cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealedをご覧ください。 .html

マーク


1
それは良い記事です。同じ方法で文字列やその他のものを作成でき、囲み文字を自由に作成できることに気づきませんでした。たとえば、%w&readable af&
Dex


1

%W%Qたとえば、二重引用符で囲まれた配列要素に使用されます。

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

%wのように単一引用符で囲まれた配列要素に使用され%qます。

%w(hello world #{foo})
# => ["hello","world", "\#{foo}"]

0
array = %w(a b c d) 

と同じ

array = ["a", "b", "c", "d"]

%w 文字列への引用符のショートカット記号です!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.