#(use gauche.mop.singleton)
(define-class <gauche-source> (<singleton-mixin>)
[] )
(define gauche-source (rlet1 r (instance-of <gauche-source> )
#?=r
) )
(define-method initialize ((self <gauche-source>) initargs)
#?= "initialize ((self <gauche-source>)"
(next-method)
)
#>gosh t.scm
#?=r
#?- #<<gauche-source> 0x9277c98>
>Exit code: 0
#singletonではinitializeが呼ばれないのですね。この場合、初期化はinstance-ofのあたりで行うというのが筋なのでしょうか?
#上記コードでのrlet1でrを初期化する・・・・ような。
#あれ、なんでだろ。(make <singleton-meta> . initargs) からnext-method呼んでるので、通常の初期化プロトコルを通るはずだけど…
#今やってみたけどinitialize呼ばれますよ。もしかして上に貼り付けたコードそのままの順序で実行しました? そしたらinitializeが定義される前にinstance-ofでインスタンスが生成されちゃってるので呼ばれないですよ。
#あ、dict-update!のバグはfixしました。まはろ。
#あああああ、そういうことだったのですか。定義順に問題があったわけですね!
#いまやってみたら動きました
##なにかにapplicableなオブジェクトを列挙しようとしているのですが、これを判定するにはどうしたらいいのでしょうか? applicable?は固定の数のような感じですし。とにかく、なにかにapplicableかどうかを判定するような。
#procedureかどうかの判定を一般化したようなものです。