#(define log-string x->string)
(define-method log-string ((vals <sequence>))
(string-join (map (cut uri-encode-string <> :encoding "utf-8") vals) ","))
#みたいなことをすると、log-stringとx-stringの両方にメソッドが定義されちゃうのは、そういうものですか?
#手抜き過ぎかな。
#(define-method log-string (x) (x->string x))ってやれば何の問題もないのだけど。
#そういうものです。log-stringと
#x->stringが両方とも同一の#<generic>を指すわけですから。
#了解です。
#「log-stringとx->stringの両方にメソッドが定義される」んじゃなくて、「log-stringとx->stringの両方がさしている単一の#<generic>にメソッドが定義される」ってことですね。
#はい
#わかってるつもりでも、時々「あれ?」となる
#まあ、define-methodが暗黙にdefine-genericを兼ねることがある、っていうのはあんまりSchemeっぽくないのは確か。
#そうですね。普段はほぼ全くdefine-genericを使わないし、意識することもないのが、こういう時に陥穽になっているのかもしれないです。楽でいいんですけどね。CLの下地がないと、こういう時に「実体はgeneric function」という発想がぱっと出てこない。
#そうか、define-methodには:key使えないんですね。
#あーそれは改善したいと思ってるんですが、なんかnontrivialな変更が必要で保留にしてた気がする