破壊的なのが苦手
なんか、Rubyで書いている時、破壊的メソッドつかうのに抵抗がある。必要であれば、使うんだけどさ。なんとか使わない方法を考えてしまう。
今日、ある文字列を置換して出力するスクリプト書いていた。それsedで(ryとかいっちゃいけない。
置換しなきゃいけない文字列がいくつかあるから、置換前と置換後の文字列をハッシュに保存して、置換をするというようにしてみた。
で、以下の2通りのどっちにするかまよってしまった。
str = " .. ." # 置換対象の文字列 hash = { .. } # 置換前の文字列と置換後の文字列をキーと値として保持したハッシュ puts(eval hash.inject("str"){ |s,h| s << ".gsub(/#{h[0]}/,\"#{h[1]}\")" })
と
str = " .. ." # 置換対象の文字列 hash = { .. } # 置換前の文字列と置換後の文字列をキーと値として保持したハッシュ hash.each_pair{|k,v| str.gsub!(/k/,v) } puts str
頭では、後者のほうが自然かなぁとは思うんだけど、なんか破壊的とか副作用って言葉に過剰に反応してしまい、前者のほうで書いてしまった。evalはいくないというから抵抗あったんだけど。
しかし、今更ながら、Hashのeachやinjectでわたってくる要素が配列だということに気づいた。俺、実はHashってあんまり使いたがらないんだ。Hashのeachやinjectでわたってくる要素は、Hashであって欲しいとおもうんだけど、普通は配列のほうが自然なのかしら。