Ruby 初心者スレッド Part 29
■ このスレッドは過去ログ倉庫に格納されています
0708デフォルトの名無しさん
2009/07/30(木) 15:51:39以下のサイトのrubyの回答で、injectを使って、ディレクトリ表記の文字列からなる配列を、木構造を模したHashにしています。
http://ja.doukaku.org/102/nested/
関係有る部分だけ、コピペします。
path_list = %w(
abc\\def
abc\\def\\gh
abc\\def\\ij
abc\\jk\\lm
de
)
h = {}
path_list.each{|path|
path.split(/\\/).inject(h){|k,v|
k[v] ||= {}
}
}
その結果が、(これは、僕のところで動かした結果)
h # => {"de"=>{}, "abc"=>{"jk"=>{"lm"=>{}}, "def"=>{"ij"=>{}, "gh"=>{}}}}
injectへの初期値に指定した変数(この場合 h) #その前に宣言されていてinjectの取るブロックの外にスコ−プがある。
は、どのように変更されているのでしょうか?
injectでのブロック変数(この場合、k,v)は、
kの方は最初に初期値が入り、その後、ブロックで最終的に評価された値が入る。
vはレシ−バの各要素が順次、代入されるということは理解しているつもりです。
今まで、初期値(h)は、その値が、最初にブロック変数(k)に代入されて、それ以降に、なにかの影響を受けてるのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています