[#6862] Re: http_get.rb — 青山 和光 <PXN11625@...>

In-Reply-To: [ruby-list:6844] Re: http_get.rb

15 messages 1998/03/01

[#6906] ruby's Icon ? — 藤本尚邦 / FUJIMOTO Hisakuni <hisa@...>

藤本です、こんにちは。

25 messages 1998/03/03
[#6907] Re: ruby's Icon ? — matz@... (Yukihiro Matsumoto) 1998/03/03

まつもと ゆきひろです

[#6908] Re: ruby's Icon ? — 藤本尚邦 / FUJIMOTO Hisakuni <hisa@...> 1998/03/03

藤本です、こんにちは。

[#6911] Re: ruby's Icon ? — OZAWA Sakuro <ozawa@...> 1998/03/03

小澤さくです。

[#6912] Re: ruby's Icon ? — 藤本尚邦 / FUJIMOTO Hisakuni <hisa@...> 1998/03/03

藤本です、こんにちは。

[#6914] Re: ruby's Icon ? — 藤本尚邦 / FUJIMOTO Hisakuni <hisa@...> 1998/03/03

藤本です、こんばんは。

[#6918] manual 1.18b index — WATANABE Tetsuya <tetsu@...>

ruby-man-1.1b8 で、name タグがついているものを拾い集めて

17 messages 1998/03/04
[#6921] Re: manual 1.18b index — matz@... (Yukihiro Matsumoto) 1998/03/04

まつもと ゆきひろです

[#6954] Re: ruby's Icon ? — nosuzuki@... (Norio Suzuki)

こんばんは。鈴木教郎です。

18 messages 1998/03/04
[#6964] Re: ruby's Icon ? — matz@... (Yukihiro Matsumoto) 1998/03/05

まつもと ゆきひろです

[#7023] infinity — Tadayoshi Funaba <tadf@...>

ふなばです。

41 messages 1998/03/09
[#7029] Re: infinity — shugo@... (Shugo Maeda) 1998/03/09

前田です。

[#7033] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/09

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

[#7041] Re: infinity — Kazuhisa YANAGAWA <katze@...> 1998/03/10

In message <199803091741.CAA05774.keiju@cupmail0.rational.com>

[#7048] Re: infinity — keiju@... (Keiju ISHITSUKA) 1998/03/10

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

[#7049] Re: infinity — matz@... (Yukihiro Matsumoto) 1998/03/10

まつもと ゆきひろです

[#7051] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/10

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

[#7054] Re: infinity — matz@... (Yukihiro Matsumoto) 1998/03/10

まつもと ゆきひろです

[#7050] Re: infinity — Kazuhisa YANAGAWA <katze@...> 1998/03/10

In message <199803100359.MAA08628.keiju@cupmail0.rational.com>

[#7259] Socket#shutdown — keiju@... (Keiju ISHITSUKA)

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

16 messages 1998/03/28
[#7260] Re: Socket#shutdown — matz@... (Yukihiro Matsumoto) 1998/03/28

まつもと ゆきひろです

[#7265] Re: Socket#shutdown — keiju@... (石塚圭樹 ) 1998/03/29

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

[ruby-list:7025] Re: builtin class inherit

From: TEI meiki <tei@...>
Date: 1998-03-09 14:42:32 UTC
List: ruby-list #7025
鄭です。

前田さん、まつもとさん、お返事ありがとうございます。

# ちょっと長くなってしまいました。確認と疑問1件と、core dump 1件です。

Yukihiro Matsumoto writes:
 > まつもと ゆきひろです
 > 
 > In message "[ruby-list:7012] Re: builtin class inherit"
 >     on 98/03/08, Shugo Maeda <shugo@po.aianet.ne.jp> writes:
 > 
 > |前田です。
 > 
 > ||こういう場合どうするのが ruby の御作法なのでしょう?
 > |
 > |継承するのはやめてDelegatorを使うというのはどうでしょう。

delegate.rb を読んでみました。
initialize の中で、渡された object が持つ メソッド群 と同名の メソッド群を
自分(これからできるインスタンス?)に 特異メソッドとして宣言(作成)していく
クラスだろうと理解しました。
なるほど...。

この delegate.rb の手法は、オブジェクト指向プログラミングでは一般的な
手法なのでしょうか?
それとも、delegate.rbは ruby の「組み込みクラスでインスタンス変数が
使えない制限」を回避するのを主目的に用意された物なのでしょうか?

ところで、、ひとつ疑問が有ります。
(なかなか、この疑問の連鎖がおわらない ^_^;)

delegate.rbの末尾の
  p foo.type # => Object
のあとに
  p foo.singleton_methods
  p foo.methods
を付け加えて、実行して見たのですが、 singleton_methods の方が 空でした。
initialize の中の 

 eval "def self.#{method}(*args); __getobj__.send :#{method}, *args; end"

は、なぜ特異メソッドにならないのでしょうか?

試みに、以下のスクリプトを実行してみたのですが、

  class Foo
    def initialize(tag)
      eval "def hoge0_#{tag}; print \"do hoge0 #{tag}\n\"; end"
      eval "def self.hoge1_#{tag}; print \"do hoge1 #{tag}\n\"; end"
    end
  end
  SELECT = ["hoge0_F1", "hoge1_F1", "hoge0_F2", "hoge1_F2" ]
  f1 = Foo.new("F1"); print "Make f1\n"
  print " f1 singleton_methods -- "; p f1.singleton_methods.sort
  print " f1 methods -- "; p ((f1.methods & SELECT).sort)
  f2 = Foo.new("F2"); print "Make f2\n"
  print " f1 singleton_methods -- "; p f1.singleton_methods.sort
  print " f1 methods -- "; p ((f1.methods & SELECT).sort)
  print " f2 singleton_methods -- "; p f2.singleton_methods.sort
  print " f2 methods -- "; p ((f2.methods & SELECT).sort)

以下のようになって、eval "def self.hoge1_ ……" はちゃんと特異メソッドに
なったのですが。

% ruby /tmp/tokui.rb 
Make f1
 f1 singleton_methods -- ["hoge1_F1"]
 f1 methods -- ["hoge0_F1", "hoge1_F1"]
Make f2
 f1 singleton_methods -- ["hoge1_F1"]
 f1 methods -- ["hoge0_F1", "hoge0_F2", "hoge1_F1"]
 f2 singleton_methods -- ["hoge1_F2"]
 f2 methods -- ["hoge0_F1", "hoge0_F2", "hoge1_F2"]

# それにしても、eval "def hoge0_ ……" の方は、インスタンスが
# 出来る度に、クラス定義にメソッドを追加してしまう結果になるのですね…
# さすが、インタプリタ …

 > その通りです.サンプルとしては
 > 
 >   lib/tempfile.rb
 > 
 > があります.

これも理解するために動かして見ようとしたら、、、

% ruby /usr/local/lib/ruby/tempfile.rb 
/usr/local/lib/ruby/final.rb:35: [BUG] Segmentation fault
zsh: IOT instruction (core dumped)  ruby /usr/local/lib/ruby/tempfile.rb

コアダンプしてしまいました。^_^;;

-- 
                         ┌─鄭  明毅───────────────────┐
                         └──tei@harmony.co.jp──tei@mirage.linc.or.jp─┘

In This Thread