Gauche > Archives > 2013/04/14

2013/04/14 00:59:47 UTCyamasushi
#
gosh> (class-direct-supers <hash-table>)
(#<class <dictionary>>)
gosh> (class-direct-subclasses <dictionary>)
()
#
CLOSSのことはよく理解していないので的外れかもしれませんが、なぜdictionaryのsubclassesが空なのでしょう?
#
gosh> (class-direct-supers <list>)
(#<class <sequence>>)
gosh> (class-direct-subclasses <sequence>)
()
2013/04/14 01:14:11 UTCyamasushi
#
gosh> (use util.sparse)
#<undef>
gosh> (class-direct-supers <sparse-u8vector>)
(#<class <sparse-vector-base>>)
gosh> (class-direct-subclasses <sparse-vector-base>)
()
2013/04/14 01:21:17 UTCyamasushi
#
http://karetta.jp/article/blog/oneline/008181 と同じことなのですが、この記事では<top>なので(all-modules)列挙で解決できるわけですが、特定のクラスとなると、これにひと工夫する必要がある・・・ということですね。
#
class-direct-subclassesは遅延シーケンスを返すのが理想なのでしょうか・・・・
2013/04/14 02:12:35 UTCshiro
#
「組み込みクラスのsubclassが正しくセットされない」というのはknown issueです。もともとclass redefinitionに使うための情報で、組み込みクラスはredefineできないので空でもいいかなと思って対応してなかったのですが、リフレクションで使う時は確かに不便です。
#
また、一般にclass redefinitionがありえるので、「class-direct-subclassesは遅延シーケンスを返す」というのはちと都合が悪いです (遅延シーケンスはimmutableなデータでないと色々面倒です)。
2013/04/14 02:22:57 UTCshiro
#
まてよ、組み込みクラスのsubclassをセットしなかったのは、当初組み込みクラスはstaticに初期化されるようにしてたからなんだけど、今は組み込みでも必ず初期化手続きが呼ばれるようになってるはずだからsubclassを更新することはできなくないかな。
2013/04/14 05:49:22 UTCyamasushi
#
そうでしたか。「known issue」はどこを参照したらいいのでしょうか?
2013/04/14 07:19:55 UTCyamasushi
#
それと、組み込みクラスかどうか判定するにはどうすればいいでしょうか? それがわかれば、そのときだけ特別になにかすればいいわけですね。
2013/04/14 09:34:13 UTCshiro
#
issueがまとまってるわけじゃないので、knownかどうかはMLとか定期的にウォッチしていてもらわないとわからないです。なので別にknown issueだから取り上げちゃだめ、という意図で言及したのではなくて、「その問題は承知しております」という単なるアクノリッジです。組み込みかどうかは、クラスのcategoryスロットを見て、そこがシンボルschemeでなければ組み込みです。
2013/04/14 09:45:11 UTCyamasushi
#
なるほど。了解しました。