2011年10月 3日

[ruby-list:48433] Re: WEBrick

牛坂さん

> 配列要素は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

--
信岡 ゆう (NOBUOKA Yu)


投稿者 xml-rpc : 2011年10月 3日 21:48
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/106654
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。