From: "牛坂 博則" Date: 2011-10-04T11:58:15+09:00 Subject: [ruby-list:48439] Re: WEBrick (2011/10/04 10:41), 牛坂 博則 wrote: 勘違いしてました。 -------------------------------------------------- すなわち、 File.join( document_root, *req.path.split( '/' ) ) は ( [ document_root ] + req.path.split( '/' ) ).join( File::SEPARATOR ) # (1) と同じであり、また File.join( document_root, req.path.split( '/' ) ) は [ document_root, *req.path.split( '/' ) ].join( File::SEPARATOR ) # (2) ------------------------------------------------------------- ですよね。 それにしても他の人も、同じ場所に疑問を持つものですね。 > [ruby-list:48432] を読みました。 > *を仮引数につけて配列をバラスのであれば、以下のように逆になるのでは。 > ----------------------------------------- > すなわち、 > File.join( document_root, req.path.split( '/' ) ) > は > ( [ document_root ] + req.path.split( '/' ) ).join( File::SEPARATOR ) # (1) > と同じであり、また > File.join( document_root, *req.path.split( '/' ) ) > は > [ document_root, req.path.split( '/' ) ].join( File::SEPARATOR ) # (2) > > > > > (2011/10/03 21:48), Y. Nobuoka wrote: >> 牛坂さん >> >>> 配列要素はreq.pathで持ってきて分割しているので、*はつ けなくてもよい >>> というこですね。 >> 配列要素を req.path で持ってきて分割しているから * を付けなくても良い、と >> いうとちょっと違うように思います。 >> きしもとさんが、[ruby-list:48432] において実引数の変数名の前に * を付ける >> 意味を解説されていますので、今回の場合に * を付けても付けなくても >> 良い理由を以下に述べておきます。 >> >> 今回使用している File#join メソッドですが、[1] をみるとわかるように >> item.join( File::SEPARATOR ) >> と同じ動きをするようです。 (item は仮引数として受け取ったパラメータの配列) >> すなわち、 >> File.join( document_root, *req.path.split( '/' ) ) >> は >> ( [ document_root ] + req.path.split( '/' ) ).join( File::SEPARATOR ) # (1) >> と同じであり、また >> File.join( document_root, req.path.split( '/' ) ) >> は >> [ document_root, req.path.split( '/' ) ].join( File::SEPARATOR ) # (2) >> と同じ動きになります。 >> そして、Array#join メソッドは 『要素がまた配列であれば再帰的に (同じ sep を利用して) >> join した文字列を連結』 する [2] ものなので、(1) の式も (2) の式も結果としては >> 同じ文字列を返します。 >> よって今回の場合は * があってもなくても同じ動きになります。 >> 一般的なメソッドの場合は、* の有る無しに意味がありますのでご注意ください。 >> >> [1] http://doc.okkez.net/static/192/class/File.html >> [2] http://www.ruby-lang.org/ja/old-man/html/Array.html#join >> > --  //////☆  ////★  //☆   牛坂 博則  ★