[#697] ++[Re: dylan [Re: swap values(Re: call by reference)]] —
けいじゅ@SHLジャパンです.
1 message
1996/10/01
[#869] Append Member — Kouki Higuchi <luke@...>
Please let me be a participate.
1 message
1996/10/20
[#895] sleep eternaly on BOW(Re: ruby 0.99.2-961023 available) — Shin-ichiro Hara <sinara@...>
原です。
6 messages
1996/10/24
[#906] [REQ]Get Strings!<3> GETS, SUB — Shin-ichiro Hara <sinara@...>
原です。
5 messages
1996/10/27
[#907] [REQ]Get Strings!<4> SPLIT — Shin-ichiro Hara <sinara@...>
原です。
6 messages
1996/10/27
[#920] bug report(each) — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
8 messages
1996/10/29
[#928] Re: hajimemashite — Itsuro Saito <saito@...>
斎藤@東大電子情報です.
9 messages
1996/10/29
[#938] ruby 0.99.3-961030 available — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです.
7 messages
1996/10/30
[#954] Rational — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
23 messages
1996/10/30
[#955] Re: Rational
— matz@... (Yukihiro Matsumoto)
1996/10/30
まつもと ゆきひろです.
[#968] Re: Rational
—
1996/10/31
けいじゅ@SHLジャパンです.
[#970] Re: Rational
— matz@... (Yukihiro Matsumoto)
1996/10/31
まつもと ゆきひろです.
[#956] Re: Rational[coerce(Re: ruby 0.99.3-961030 available) ] — Shin-ichiro Hara <sinara@...>
原です。
4 messages
1996/10/30
[#965] ruby-mode — Yasuo OHBA <jammy@...>
大庭@SHLJapanです.
6 messages
1996/10/31
[ruby-list:692] Re: ? for Object#extend
From:
Date:
1996-10-01 03:46:05 UTC
List:
ruby-list #692
けいじゅ@SHLジャパンです.
In [ruby-list :00663 ] the message: "[ruby-list:663] Re: ? for
Object#extend ", on Sep/30 15:44(JST) matz@caelum.co.jp (Yukihiro
Matsumoto) writes:
>|で, リクエストもありまして, ビルトインクラスにextendするわけにはいかな
>|いのか? というものです.
>ビルトインクラスをextendできないのは以下の理由です.
>
> * ビルトインクラスのように良く使われるものがインスタンス毎
> に動作が違うのはどうだろうか
> * ビルトインクラスはインスタンス変数を持てないので,メソッ
> ドを追加する時に不自由が出る
>
>しかし,どうしてもそうでなければならないほど強い理由ではない
>です.現実にチェックしている部分を外せば簡単にできるようにな
>るはずです.後者はビルトインクラスのサブクラスが作れる以上意
>味が無いという話もありますね.
そうですね. 確かに, 意味がないように感じます(^^;;
>|あと, 特異メソッドもビルトインクラスのインスタンスには登録できませんよ
>|ね. 登録できるようには難しいのでしょうか??
>
>これもチェックしている部分は同じですから,上述の通り難しくは
>無いです.
なるほど. どちらがいいんですかねえ...
とりあえず, 私が extend したくなった状況を説明しましょう.
ビルトインクラスにextendしたいと思ったのは, ソート用のモジュール
Sortableというのを作っていたからです.
SmalltalkのSortedCollectionと同じような機能を持つモジュールで, ソート
の機能と2分検索をサポートするなのですが, rubyらしくモジュールの方が良
いかと思ったわけです.
なぜ, クラスではなくてモジュールなのかというと, ソートの可能性は[],
[]=と要素間の比較ができればよいわけで, クラスである必要はないかと思っ
たわけです.
また, ソートの仕方はクラス毎に決まるものではなく, オブジェクト単位に決
まることが多いと思うので, arrayなどのオブジェクトにextendできれば良い
なあと感じたわけです.
使い方としては, 以下のような感じです.
a = [1, 2 , 3]
a.extend Sortable
a.sort{|e1, e2| e2 <=> e1} # -> a == [3, 2, 1]
a.insert(0) # -> a == [3, 2, 1, 0]
a.delete(2) # -> a == [3, 1, 0]
a.sort{|e1, e2| e1 <=> e2} # -> a == [0, 1, 3]
まず, Sortableをextendしてから, sortをかけます. このsort関数は, モジュー
ル関数でsortと同時に比較関数を設定します. で, そのあと, 色々な操作がで
きるようになるというわけです.
まあ, 今のような背景があるわけですが, どうなんですかね? このような形態
のモジュールはあまり好ましくないということになるのでしょうか?
このモジュール以外の方法としては, Hashクラスのようにキーとオブジェクト
を分けるやり方もありますが, そういうクラスもこのSortableがあれば簡単に
実現できるようになります.
__
.....................................石塚 圭樹@事開事.三井造船(株)...
------------->アドレス変わりました!! e-mail: keiju@csg.mes.co.jp <----