[#8257] Re: Smalltalk [Re: design patterns] — 助田 雅紀 <masaki.suketa@...>

助田です。

11 messages 1998/06/09
[#8259] Re: Smalltalk [Re: design patterns] — KIMURA Koichi <kkimura@...> 1998/06/10

[#8262] TkGrid do not exist? — Hiramatu Yoshifumi <hiramatu@...>

平松です。

26 messages 1998/06/10
[#8266] Re: TkGrid do not exist? — matz@... (Yukihiro Matsumoto) 1998/06/10

まつもと ゆきひろです

[#8269] Re: TkGrid do not exist? — NAGAI Hidetoshi <nagai@...> 1998/06/10

永井@知能.九工大です.

[#8271] Re: TkGrid do not exist? — NAGAI Hidetoshi <nagai@...> 1998/06/10

永井@知能.九工大です.

[#8375] new MethodIndex — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

21 messages 1998/06/16
[#8447] new MethodIndex — TEI meiki <tei@...> 1998/06/20

こんにちは、鄭です。

[#8448] new MethodIndex — TEI meiki <tei@...> 1998/06/20

再び、鄭です。_o_

[#8418] how to use delegate — gotoken@... (GOTO Kentaro)

ごとけんです

18 messages 1998/06/18
[#8419] Re: how to use delegate — matz@... (Yukihiro Matsumoto) 1998/06/19

まつもと ゆきひろです

[#8420] Re: how to use delegate — gotoken@... (GOTO Kentaro) 1998/06/19

ごとけんです

[#8421] Re: how to use delegate — matz@... (Yukihiro Matsumoto) 1998/06/19

まつもと ゆきひろです

[#8521] hash sort — "Kazuhiro Yoshida" <s95l980@...>

もりきゅうです。

34 messages 1998/06/26
[#8523] hash sort — gotoken@... (GOTO Kentaro) 1998/06/26

ごとけんです

[#8533] Re: hash sort — WATANABE Hirofumi <watanabe@...> 1998/06/26

わたなべです.

[#8534] Re: hash sort — gotoken@... (GOTO Kentaro) 1998/06/26

ごとけんです

[#8536] Re: hash sort — Sinichiro Dezawa <dezawa@...> 1998/06/26

出沢です

[#8538] Re: hash sort — gotoken@... (GOTO Kentaro) 1998/06/26

ごとけんです

[#8539] Re: hash sort — TAKAHASHI Masayoshi <maki@...> 1998/06/26

高橋です。

[#8541] Re: hash sort — gotoken@... (GOTO Kentaro) 1998/06/26

ごとけんです

[#8546] Re: hash sort — Tadayoshi Funaba <tadf@...> 1998/06/26

ふなばです。

[ruby-list:8421] Re: how to use delegate

From: matz@... (Yukihiro Matsumoto)
Date: 1998-06-19 04:44:31 UTC
List: ruby-list #8421
まつもと ゆきひろです

In message "[ruby-list:8420] Re: how to use delegate"
    on 98/06/19, GOTO Kentaro <gotoken@math.sci.hokudai.ac.jp> writes:

|ごとけんです

|なるほど。つまり型を完全に偽ることはできないのですね。

そうですね.嘘はほどほどに.
# あれ? でもkind_of?も転送されるんじゃないかなあ.

|>  (1) delegate.rbを参考にオブジェクトではなくクラスを定義す
|>      るライブラリを作る
|>
|>  (2) 必要に応じてfoo2をcloneする(プロトタイプベースだ)
|>
|>ということが考えられます.
|
|(1) を検討してみたいのですが、delegate.rb 中の
|__send__ と言うのが分りません。
|Object#send と同じモノでしょうか?

そうです.sendはSocketなどで再定義されているので,こういう名
前の別名を持ってます.

|それと、確認したいのですがクラス版のdelegatorを作る
|場合、適当な機能を持った Class のインスタンスを
|返すモノを書くと理解して良いのでしょうか? 

あー,ちょっと待って下さいね….

多分,こういうのがよろしいんじゃないかと思います.

  class FakeArrray<DelegateClass
    mimic(Array)
    ...
  end
  a = FakeArrary.new([1])

とするとこんな感じでないでしょうか.

class DelegateClass
  def initialize(orig, *args)
    @obj = orig
    super(*args)
  end
  def DelegateClass.mimic(klass)
    methods = klass.instance_methods
    methods -= ["__getobj__","to_s","nil?","to_a","hash","dup","==","=~"]

    for method in methods
      self.module_eval <<EOS
      def #{method}(*args, &block)
	begin
	  @obj.__send__(:#{method}, *args, &block)
	rescue
	  $@[0,2] = nil
          raise
	end
      end
EOS
    end
  end
end

あ,でもこの場合,メソッドの再定義が出来ないので,無名のクラ
スを生成する関数を用意して

  class FakeArrray<DelegateClass(Array)
    ...
  end

の方が完璧に近そうですね.おお,テンプレートクラスのようだ.
# これは宿題にしましょう.

                                まつもと ゆきひろ /:|)

In This Thread