Gauche > Archives > 2020/03/12

2020/03/12 09:37:09 UTCkaki
#
lambda の引数指定でキーワード引数が0個のときの :allow-other-keys がうまく動いていないようです。
#
gosh> ((^ (:key :allow-other-keys kw) kw))
*** ERROR: unbound variable: kw
Stack Trace:
_______________________________________
  0  kw
        [unknown location]
  1  (eval expr env)
        at "/usr/local/share/gauche-0.97/0.9.9/lib/gauche/interactive.scm":267
gosh> ((^ (:allow-other-keys kw) kw))
*** ERROR: unbound variable: kw
Stack Trace:
_______________________________________
  0  kw
        [unknown location]
  1  (eval expr env)
        at "/usr/local/share/gauche-0.97/0.9.9/lib/gauche/interactive.scm":267
2020/03/12 10:27:17 UTCshiro
#
ああ、そもそも「:keyがない:allow-other-keys」というのを考慮してないですね。Common Lispだとこれはエラーだな…どうしようかな
#
:keyを使わないなら:restでいいわけだからエラー、とするか、単に:restと同じ扱いにするか。書き間違いを検出するなら前者の方がいいかな。
2020/03/12 10:42:05 UTCshiro
#
うおっと、:keyのない:allow-other-keys、自分で2箇所ばかり書いてたぞい
#
メソッドのformals。同じgeneric functionに属するメソッドでキーワード引数を取るやつもあるけれど、俺は無視するぜ、という意思表示。rest引数をbindしてなかったので普通に動作してた。
#
むしろ:keyなしでも許す方がfixとしては簡単だな。
2020/03/12 12:06:03 UTCkaki
#
キーワード引数が1個以上の場合はrestが偶数長かどうかはチェックされるので、キーワード引数が0個の場合も同様にチェックされることを期待しました。
2020/03/12 21:33:00 UTCshiro
#
なるほどそういう使い方はありですね。
2020/03/12 21:54:19 UTCshiro
#
対応してみました https://github.com/shirok/Gauche/commit/796f88e1380a66cd75da23cee450d287a2c708d7