[#1320] [MethodIndex] Bug and question — keiju@... (Keiju ISHITSUKA)

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

32 messages 1998/01/23
[#1321] Re: [MethodIndex] Bug and question — matz@... (Yukihiro Matsumoto) 1998/01/23

まつもと ゆきひろです

[#1323] Re: [MethodIndex] Bug and question — keiju@... (Keiju ISHITSUKA) 1998/01/23

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

[#1332] Re: [MethodIndex] Bug and question — keiju@... (Keiju ISHITSUKA) 1998/01/27

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

[#1333] Re: [MethodIndex] Bug and question — matz@... (Yukihiro Matsumoto) 1998/01/27

まつもと ゆきひろです

[#1334] Re: [MethodIndex] Bug and question — keiju@... (石塚圭樹 ) 1998/01/27

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

[#1351] Re: [MethodIndex] Bug and question — keiju@... (石塚圭樹 ) 1998/01/29

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

[#1353] Re: [MethodIndex] Bug and question — matz@... (Yukihiro Matsumoto) 1998/01/29

まつもと ゆきひろです

[#1354] Re: [MethodIndex] Bug and question — keiju@... (石塚圭樹 ) 1998/01/29

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

[#1355] Re: [MethodIndex] Bug and question — matz@... (Yukihiro Matsumoto) 1998/01/30

まつもと ゆきひろです

[ruby-dev:1358] Re: [MethodIndex] Bug and question

From: keiju@... (石塚圭樹 )
Date: 1998-01-30 08:59:10 UTC
List: ruby-dev #1358
けいじゅ@日本ラショナルソフトウェアです.

In [ruby-dev :01355 ] the message: "[ruby-dev:1355] Re: [MethodIndex]
Bug and question ", on Jan/30 13:46(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

話の楽な順にソートします.

>しかし,メソッドインデックスを実装する上で上記のモデルや現在
>の実装に不都合があるということでしたら,メタレベルの機能の提
>案者は石塚さんですから,相談に乗ります.

というせんで話を進めさせてもらいます.

>  次に,「class <<obj; .. end」という構文ですが,これの仕様

(中略)

>  りもともとのクラスのインスタンスであることには変わりないと
>  考えているので.
>
>        obj.instance_of?(class)
>
>  の定義は
>
>        obj.type == class
>
>  であり,それ以上のものではありません.
>
>で,

うーむ. それもそうですね. これは納得しました.

>|>|4.3 つぎに, incetance_of?に関する質問ですが.
>
>これらはおかしいと思いますが,1.1b5でも前者はtrueが返ります
>し,今回のパッチで後者もtrueを返すようになったと思います.

そうでした. 昔のバージョンを実行していたみたいです. おさがわせしました
(__;;

ここからが問題ですが.

>|``class << Bar; ancestors; end ''の結果が
>|不満なんです. やはり:
>|
>|  Barの特異クラス < Fooの特異クラス < Bazの特異クラス <Objectの特異クラス <
>|  Class < Module < Object < Kernel
>|
>|となって欲しいんですが...
>|
>|# MethodIndexはこうなっていることを前提として実装してしまいました(;_;
>
>むむう.まず特異クラスの意味について考えましょう.いわばモデ
>ルですね.
>
>  まず,現在のRubyの実装では各オブジェクト毎に名前のないクラ
>  スが付随していますが,これは言語仕様に含まれていません.で
>  すから,ancestersに特異クラスが含まれることはありえません.

うーむ. 言語仕様にないのでそのオブジェクトが出てはおかしいというのは, 
理解できます.

しかしですね. 実際に, 

Barのクラスメソッド < Fooのクラスメソッド < Barのクラスメソッド 
<Objectの特異クラスのクラスメソッド < Class < Module < Object < Kernel

の順番に継承していることは事実ですから, それが実際に明らかになるAPIが
欲しいんですよね.

でも, 特異クラスを表に出さないとなるともっと別な方法が必要ですね.

気分的には特異メソッドの継承系列を出力するAPIがあれば良いんだと思いま
す.

  Object#singleton_method_ancestors
  or
  Object#singleton_ancestors

まあ, 一般のObjectではあまりいみがないことが多いので, Moduleに限定して

  Module#singleton_method_ancestors
  or
  Module#singleton_ancestors

でも, いいですが

で, 問題はこれで何を返すかですが... 通常はクラスそのものを返す仕様で良
いのではと思います:

  class Foo; end
  class Bar < Foo; end

  Foo.singleton_method_ancesotrs
--
  [Foo, Object, (Class, Module, Object, Kernelのインスタンスメソッド)]

  Bar.singleton_method_ancesotrs
--
  [Bar, Foo, Object, (Class, Module, Object, Kernelのインスタンスメソッド)]

が... 実際にはClass/Module...のインスタンスメソッドも継承することがあ
るので, そのへんをどうやって表すかですね... それに, extendしてある場合
もありますし...

  module Baz; end
  Bar.extend Baz

インスタンスメソッドの場合は配列にするとして.

  Bar.singleton_method_ancesotrs
--
  [Bar, [Baz], Foo, Object, [Class], [Module], [Object], [Kernel]]

って感じですか...

あまりカッコ良くないな...

あとは, 属性とのペアで渡すとか:

  Bar.singleton_method_ancesotrs
--
  [[Bar, :single], [Baz, :instance], ...]

PS.
ところで確認なんですが.

rbc0> module Bar; end
rbc0> class Foo
rbc1>  include Bar
rbc1> end
rbc0> class Baz < Foo
rbc1> end
rbc0> Baz.ancestors
# 1
[Baz, Foo, Bar, Object, Kernel]
rbc0> class Baz
rbc1>  include Bar
rbc1> end
Baz
rbc0> Baz.ancestors
# 2
[Baz, Foo, Bar, Object, Kernel]

こういう結果が出るんですが, 実際にこれが仕様なんですよね?

__
................................石塚 圭樹@日本ラショナルソフトェア...
----------------------------------->> e-mail: keiju@rational.com <<---

In This Thread