Gauche > Archives > 2014/05/06

2014/05/06 06:18:19 UTCshiro
#
ふーむ。dictionaryプロトコルを実装する何かのユーティリティfooを作る場合、基本的な操作はもういちいちfoo-getとかfoo-put!とか作らずにdict-get等で良いと思うんだけど、モジュールfooが単に(use gauche.dictionary)しててdict-get等をexportしてない場合、fooのユーザが(use foo)しただけではdict-get等が使えない。
#
モジュールfooがdictionary interfaceを全部exportすれば使い勝手は向上するけど、いちいち全部列挙するのはめんどいし、せっかく「コアメソッドだけ実装すれば後は勝手についてくるよ」ってフレームワークなのにexportで全部列挙させるのはなんだかなあ、である。
#
モジュールfooが(extend gauche.dictionary)すればdictionary interfaceも遷移的にexportされるが、今のgauche.dictionaryには<bimap>とかも定義されてるんで、(use foo)したときにそういうのがくっついてくるのはそれはそれで気持ち悪い。
#
振り返って考えれば、gauche.dictionaryは共通APIだけに止めておいて、bimapとかは別モジュールにすべきだったなあ。
#
今からの対応としては、共通APIだけをexportするモジュールを別に作って、「dictionaryの実装はこれをextendしてね」とする手はある。なんかツギハギで美しくないけど。