assert_operator の導入の件、ありがとうございます。

At Sat, 6 Jan 2001 09:06:44 +0900 (JST),
Masaki Suketa wrote:
> In message "[ruby-ext:01467] Re: RUNIT::Assert#assert_test"
>     on 00/12/24, Masaki Suketa <CQN02273 / nifty.ne.jp> writes:
> 
> > >  ところで、 Ruby の仕様上 !=, !== はメッセージとして使えないので、
> > > いっそ次のメソッドも導入してしまいませんか?そんなに利用されるか
> > > どうかは分かりませんが、否定もあった方が一貫性があると思います。
> > > 
> > > assert_not_equal(obj1, obj2, message="") # obj1 != obj2
> > > assert_not_same(obj1, obj2, message="")  # !obj1.equal? obj2
> > > assert_eqq(obj1, obj2, message="")       # obj1 === obj2
> > > assert_not_eqq(obj1, obj2, message="")   # obj1 !== obj2
> > 
> > 構いません。
> 
> って言ったのですが、これは、XPでいうところのYAGNI
> ではないかと思い始めました。
> という訳で、「一貫性」という理由だけだと導入しづらいです。

 上に挙げてある「!=, !== はメッセージとして使えないから」は
理由にならないでしょうか。つまり、

    assert_operator(o1, :!==, o2)

が文法上できず

    assert_not_eqq(o1, o2)

もないとなると、自分で

    assert(o1 !== o2, "o1[#{o1}] === o2[#{o2}] !")

などと書かなくてはならない、という意味です。

 assert_not_same については失敗した場合のメッセージは自明と思え
ますが、それでも両者が nil 同士で一致したのかどうかなどがあるので、
メッセージを出してやるのは役に立つこともあると思います。

# Ruby の実装をいじって != や !== もメソッド呼び出し(扱い)にして
# しまうのが本手?


 YAGNI というのは、拡張性などの将来あるかも分からない利便の
ために柔軟な設計を取り、結果実装が複雑になってしまうということを
避けるための指針ですよね。

 上に挙げたようなメソッドの実装は簡単で一回作れば終わりですし、
あまり当てはまらないんじゃないかという気はします。(生意気な生徒で
済みません ^-^;)

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"We're only at home when we're on the run, on the wing, on the fly"