| 著作一覧 |
あまりにもあほうなバグのために1~2時間ほど悩む。
最初、次のようなコードを書いていた。
class X
def htov(a) #本当はjoinでは済まない程度に複雑
s = "**begin**\n"
a.each {|e| s << "#{e}\n" }
s << "**end**\n"
end
end
最初のと最後のマークを定数にしたほうが良いことに気づく(他のオブジェクトも利用するからだ)。
で、直す。
class X
BEGIN_MARK = "**begin**\n"
END_MARK = "**end**\n"
def htov(a)
s = BEGIN_MARK
a.each {|e| s << "#{e}\n" }
s << END_MARK
end
end
で、1回動かして問題ないことを確認したわけだが、あとから動かしていると異常なデータが作られまくる。
4文字追加して修正。
追記:Stringを定数として扱いたければ積極的に例外にさせるためにfreezeしたものに定数名をつけるのが良いだろう。BEGIN_MARK = '**begin**¥n'.freeze
ジェズイットを見習え |