トップ «前の日記(2018-03-27) 最新 次の日記(2018-04-12)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2018-04-11

_ 今日のバグ

あまりにもあほうなバグのために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


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|

ジェズイットを見習え