FileUtilsのドキュメントを見ています。私は次の行に混乱しています。
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/Ruby/1.6'
%w
はどういう意味ですか?あなたは私にドキュメンテーションを教えてもらえますか?
%w(foo bar)
は["foo", "bar"]
のショートカットです。つまり、カンマではなくスペースで区切られた文字列の配列を引用符なしで表記するということです。 zenspiderのquickref にリテラルの書き方のリストがあります。
私は%w()
を "Wordの配列"と考えています - 要素はスペースで区切られていて文字列の配列を返します。
他にも%リテラルがあります。
%r()
は正規表現を書くもう一つの方法です。%q()
は、一重引用符で囲まれた文字列を書くためのもう1つの方法です(複数行にすることもでき、これは便利です)%Q()
は二重引用符で囲まれた文字列を返します%x()
はシェルコマンドです%i()
はシンボルの配列を返します(Ruby> = 2.0.0)%s()
はfoo
をシンボルに変換します(:foo
)私は他には誰も知りませんが、そこに潜んでいる人がいるかもしれません...
任意のシンボルを作成できる%s
もあります。例えば:
%s|some words| #Same as :'some words'
%s[other words] #Same as :'other words'
%s_last example_ #Same as :'last example'
Ruby 2.0.0以降、あなたも持っています:
%i( a b c ) # => [ :a, :b, :c ]
%i[ a b c ] # => [ :a, :b, :c ]
%i_ a b c _ # => [ :a, :b, :c ]
# etc...
%W
および%w
を使用すると、引用符やカンマを使用せずに文字列の配列を作成できます。
これは古い投稿ですが、質問は増え続け、答えはいつも私には明らかではないように思われるので、私の考えはここにあります:
%w
と%W
は、配列に関連する一般区切り入力 types の例です。 %q
、%Q
、%r
、%x
、および%i
を含む他の型があります。
大文字と小文字のバージョンの違いは、一重引用符と二重引用符の機能にアクセスできることです。一重引用符と(小文字)%w
を使用すると、コード内挿(#{someCode}
)と、有効なエスケープ文字の範囲が制限されます(\\
、\n
)。二重引用符と(大文字)%W
we do を使うと、これらの機能にアクセスできます。
使用される区切り文字は、左括弧だけでなく、任意の文字にすることができます。上記の例を見て、効果があることを確認してください。
%w
と完全なリスト、エスケープ文字と区切り記号の例をまとめた完全な記事については、 " Ruby - %w vs%W - 秘密が明らかにされた! "をご覧ください。
%w()
の代わりに%w[]
を使うべきです
Rubyスタイルガイドによると:
単語の配列(スペースや特殊文字を含まない空でない文字列)が必要な場合は、%wをリテラル配列構文にしてください。この規則は、2つ以上の要素を持つ配列にのみ適用してください。
# bad
STATES = ['draft', 'open', 'closed']
# good
STATES = %w[draft open closed]
さまざまな種類のパーセントリテラルに最も適した中括弧を使用してください。
配列リテラルの場合は[]
(%w, %i, %W, %I
)。標準の配列リテラルと揃えられます。
# bad
%w(one two three)
%i(one two three)
# good
%w[one two three]
%i[one two three]
もっと読むために ここ 。
http://Ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings にあるパーセント文字列のドキュメントからの抜粋
文字列を作成する%(...)以外に、%は他の種類のオブジェクトを作成することができます。文字列と同様に、大文字は補間とエスケープ文字を許可し、小文字はそれらを無効にします。
これらはRubyのパーセント文字列の種類です:
...
%w :文字列の配列
ユーザーのフルネームのCSVスプレッドシートから多数の列が与えられ、スペースを使用して書式設定を維持する必要がありました。 Rubyの使用中にそれらを取得するために見つけた最も簡単な方法は、次のとおりでした。
names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')
これは、%()
が"Porter Smith\nJimmyJones\nRonald Jackson"
のような文字列を作成し、"\n"
["Porter Smith", "Jimmy Jones", "Ronald Jackson"]
の文字列をsplit
配列を取得することを強調しています
したがって、OPの元の質問にも答えるために、space
を最終的な配列出力に存在させたいときにspace
があった場合、彼らは%(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')
を書いたかもしれません。