From: Masahiro S. ()
<sa...@to...> - 2003-08-31 06:36:25
|
さかいです。 From: Masao Mutoh <mu...@hi...> Subject: Re: [ruby-gnome2-devel-ja] Enum/Flags Date: Sun, 31 Aug 2003 00:29:50 +0900 > むとうです。 > > On Sat, 30 Aug 2003 23:00:48 +0900 > Masao Mutoh <mu...@hi...> wrote: > > > さかいさん > > > > それから、現状、<=>等のメソッドがEnumの方に定義されていないので、 > > > 例えば、gtk/sample/misc/cursor.rb等でエラーが出ます。 > > > これは、Flagsの方に合わせて単に定義すればよいのかな。 Flagsの方の比較演算はビット集合の包含関係で定義してありますが、 Enumの比較演算は * 整数値としての大小関係 * nameの文字列としての大小関係 * nickの文字列としての大小関係 とか色々考えられて、必ずしも自明ではないように思ったので、 今のところは Enum#== 以外定義していません。 このgtk/sample/misc/cursor.rbに関しては、 定数を探してソートする事に苦労するよりは、 cursors = Gdk::Cursor::Type.values としてしまったような方が良いと思います。 > > 今、GTKの方を対応中なのですが、bit-maskで表現されるような値を > > 返すときはどうしますか? > > > > 例えば、GdkEventKeyのstateなど。 > > ひとまず、元のままINT2NUMで残しておきますが、 > > これをクラス化にするとしたら、内部的に変換して、配列化して返すような > > イメージでしょうか。 > > これ、実装済みですね。素直にGFLAGS2RVAL使います。 > #今確認しました(^^;)。 > > 一つのインスタンスが複数の状態を持つイメージですよね。なるほど。 そうです。 > これ、1つずつの値を出したりできたら良いかもしれませんね。 > GLib::Flags#to_a みたいな。 > #もちろん、|,&とかも定義されてるのでそちらから導き出すことはできるの > #でしょうけど。 そうですね。 実は元々は、 class GLib::Flags def to_a self.class.values.select{|v| self >= v } end end のような感じのメソッドを定義していたのですが、 * valuesの中には単一のフラグでないような値 (例えば Gdk::Event::ALL_EVENTS_MASK)も含まれている事があるので、 その扱いで悩んだのと、 * to_aという名前に違和感があったので、 消してしまいました。 良い名前があれば復活させたいところです。 -- Masahiro Sakai |