From: URA Takefumi Date: 2001-11-06T00:37:00+09:00 Subject: [ruby-list:32207] Re: assert and assert_equal Masaki Suketa wrote in <200111051213.VAA21424@smtp2.nifty.ne.jp> > 第二引数が文字列かどうかチェックすることで、ある程度、このような > トラブルは回避できるんですけど、限界があります。 > いっそ、assertの引数は1つにするとか、考えたのですが、assert こそ > 失敗したときに何故失敗したかの情報が無いとデバッグするときに > 面倒なんですよねえ。 こういうのはどうでしょうね。 --- def assert(test, mes = {:message => 'default'}) unless test raise if !mes.is_a?(Hash) || mes[:message].nil? # (A) puts mes[:message] # いろいろ end end ##### assert(x, :message => 'xがだめ') assert(y) # default message assert(z, 'こいつは(A)で実行時エラー') --- 第2引数をHashにしてしまうという方法はどうでしょう。これだとHash以外のも のが渡されたらRubyが(A)のところで実行時エラーにしてくれますし。あ、もち ろん例外でなくてもいいですけど。 ただ他の、たとえばassert_equalとかのメッセージを渡すやり方と整合性が取れ ませんし、既存のコードをなおす必要がありますが。 あと第二引数が偶然Hashでさらに偶然に:messageというkeyがあったらダメです けど。それでも今よりは危険性がだいぶ減るような。 -- 浦 岳史 (うら たけふみ) 【メイルアドレスをURL表記しよう運動】 mailto:hage@power.email.ne.jp