FileUtilsのドキュメントを見ています。
私は次の行で混乱しています:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
どういう%w
意味ですか?ドキュメントを教えてもらえますか?
%w(foo bar)
のショートカットです["foo", "bar"]
。つまり、コンマの代わりにスペースで区切られ、引用符なしで文字列の配列を記述することを意味します。zenspiderのquickrefでリテラルを書く方法のリストを見つけることができます。
私は%w()
「単語配列」と考えています。要素はスペースで区切られ、文字列の配列を返します。
%w()
文字列の配列%r()
正規表現。%q()
ストリング%x()
シェルコマンド(出力文字列を返す)%i()
シンボルの配列(Ruby> = 2.0.0)%s()
シンボル%()
(文字なし)のショートカット%Q()
区切り文字(
とは、and 、、、など)
の多くのバリエーションに置き換えることができます。[
]
|
!
大文字を使用する場合は、および文字列区切り文字と同様に、%W()
文字列補間を使用できます。このルールは、他のすべての%リテラルでも機能します。#{variable}
"
'
abc = 'a b c'
%w[1 2#{abc} d] #=> ["1", "2\#{abc}", "d"]
%W[1 2#{abc} d] #=> ["1", "2a b c", "d"]
%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
一般的な区切り入力タイプの例です。、、、、およびを含む他のタイプが%q
あります。%Q
%r
%x
%i
大文字と小文字のバージョンの違いは、一重引用符と二重引用符の機能にアクセスできることです。一重引用符と(小文字)%w
を使用すると、コード補間(#{someCode}
)がなく、機能するエスケープ文字の範囲が制限されます(\\
、\n
)。二重引用符と(大文字)%W
を使用すると、これらの機能にアクセスできます。
使用される区切り文字は、開き括弧だけでなく、任意の文字にすることができます。上記の例を試して、実際にそれを確認してください。
%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スプレッドシートから多数の列が与えられ、スペースを使用してフォーマットを維持する必要がありました。ルビーを使用しているときにそれらを取り込むために私が見つけた最も簡単な方法は、次のことを行うことでした。
names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')
これ%()
は、のような文字列を作成するハイライトで"Porter Smith\nJimmyJones\nRonald Jackson"
あり、配列を取得するsplit
には、"\n"
["Porter Smith", "Jimmy Jones", "Ronald Jackson"]
したがって、OPの元の質問にも答えるために、最終的な配列出力に存在させたい%(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')
場合があった場合、彼らは書いた可能性があります。space
space