[#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ジャパンです.

[ruby-list:711] Re: ? for Object#extend

From:
Date: 1996-10-02 04:50:50 UTC
List: ruby-list #711
けいじゅ@SHLジャパンです. 

In [ruby-list :00710 ] the message: "[ruby-list:710] Re: ? for
Object#extend ", on Oct/02 11:50(JST) matz@caelum.co.jp (Yukihiro
Matsumoto) writes:

>|ビルトインクラスにextendしたいと思ったのは, ソート用のモジュール
>|Sortableというのを作っていたからです.

>これは非常に面白いアイディアだと思いますが,気になる点がいく
>つかあります.

>まず,extendしてからsortを実行するまで「SortableなのにSortさ
>れていない」状態ができますよね.これって望ましくないのでは?

実はそうなんですよ.

で, この問題に関わらず, extend/includeした時に初期化を行ないたい時があ
ると思うので, extend/includeした時に実行される関数が定義できるようになっ
ているとよいと思いませんか?

例:

a = [1, 2, 3]
a.extend(Sortable) {...}
  or
a.extend(Sortable, proc{...})

とすると, Sortableの関数, extended(...)が実行されるなど.

>で,次の方が本質的なのですが,多分Sortable#sortでlambdaをつ
>くって評価関数として保存する必要があると思うのですが,既に述
>べた通りビルトインクラスはインスタンス変数が持てませんから,
>この情報を保持する場所が無いような気がします.

>昔は全てのオブジェクトがインスタンス変数を持てるようにしてい
>たのですが,オブジェクトサイズを削るためビルトインクラスには
>持てないようにしてしまったのです.

あれ? そうなんですか?? ビルトインクラスがextendが可能になれば, モジュー
ル側で定義されるインスタンス変数が定義されると思っていましたが??

>Mixinの使い方としては非常に面白いと思います.さすが石塚さん.

お褒めに預ってどうも(*^^*

>もう一歩捻ってこういうのはどうでしょう.
>
>a = [1,2,3]
>Sortable.new(a) {||e1, e2| e2 <=> e1} # -> a == [3, 2, 1]

>Sortable::newは新しいモジュール(Sortableをincludeしている)を
>つくってそれでaをextendするわけです.
>
>うーん,ちょっと捻り過ぎのような気もする.

これって, 何をやっているのか良く分からないのですが...

Sortable.new(a) は:

  a.extend(Sortable)
  a.sort{...}

を行なっているだけではないんですよね??

これだと, 初期化の件は解決していると思いますが, インスタンス変数の件は
解決していないですよね?

>|このモジュール以外の方法としては, Hashクラスのようにキーとオブジェクト
>|を分けるやり方もありますが, そういうクラスもこのSortableがあれば簡単に
>|実現できるようになります.
>ごめんなさい,ここ良く分かりませんでした.

Hashは key->value の組みですよね. 一方 Sortableはkeyがインスタンスに含
まれる感じになっていますよね? Hashのように key->value とするクラス(例:
Bin)を作れるといっただけです.

class Bin
  include Sortable
  ...
end

b = Bin.new
b[key] = value
  ...

__
..........................................石塚 圭樹@SHLジャパン(株)...
------------->アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----

In This Thread

Prev Next