[Gauche-devel-jp] hash-tableに対するpush!

Back to archive index

Shiro Kawai shiro****@lava*****
2014年 6月 12日 (木) 21:02:08 JST


「push!はそういうもの」と定義してしまえば一貫性はありますね。
ただ、現状のGaucheの実装は例外ハンドラを設定するだけでもオーバヘッドがあるので、
push!の度にハンドラ設定が入るのはちょっと嫌かなあ

性能を考えるなら、「初期値が無ければ()を返す」ようなref、というgeneric function
(デフォルトではただrefを呼ぶ) を作っといてpush!はそれを使うって手も
考えられます。ちょっと用途が狭すぎる感じですが。

とはいえsparse-vectorなど、最初にpush!する前には値がないデータ構造、
というは他にもあるので、push!側で対応するというのが理にかなっているような
気はしてきました。

--shiro


From: Masatake YAMATO <yamat****@redha*****>
Subject: Re: [Gauche-devel-jp] hash-tableに対するpush!
Date: Thu, 12 Jun 2014 20:24:27 +0900 (JST)

>> なるほど。
>> 
>> push!は定義からして、対象となる場所の初期値が()であることを前提にしてます。
>> なので「初期値を別に与えないとならない場所」に使うのはドメインエラーとも言えます。
> 
> ドメインエラーと言われていしまいましたが、push!を拡張するというのは的外
> れでしょうか。
> 
> 前もってpush!が想定する例外を決めておき、push!可能なデータ側は「初期値
> が無い」ところをrefしたタイミングで例外を上げることにします。push!は、
> その例外がきたときだけ値を ( ) でつつんで set!します。この実現方法であ
> れば<hash-table>を含む初期値がない他のデータ型でもpush!でき、あたらしい
> データ型を覚えずに済みます。
> 
> あるゆるpush!に例外をキャッチするための仕掛けを準備するステップが増える
> のでもしかしたら問題となるかもしれませんが、新しいことを覚えずに済むのは
> 魅力に思います。
> 
> 大和




Gauche-devel-jp メーリングリストの案内
Back to archive index