最近のキーワード
A500 AirH" android Annotation cvs cygwin DSL Eclipse Flash flex git Gizmo HTC Desire Huawei ICONIA java javascript Linux metadata moonse NOKIA OpenLaszlo packrat RK1 rockchip ruby RubyKaigi RubyOnRails S11HT Seesaa sourceforge superfroyo SVN tdp4j tdp4js tdp4r thunderbird vaniljeclair vodafone W-ZERO3 Windows X02HT X06HT x11 xml ステップワゴン タグ ホンダ ポーランド記法 携帯 構文解析 納車
2006年07月14日
多値とArray
やっぱり、多値をArrayで表そうとするのは苦しいと思う。
少なくとも内部表現としては、Arrayを継承したValuesなどのクラスを作るか、あるいは、全く別物のクラスを作るほうが混乱が少ないと思う。
例えば、*[a,b,...,z]によって多値を表すオブジェクトが作られる。また、メソッド引数の組み合わせはそもそも多値として表現される。そして、多値は決して変数には代入されないようにするために、代入時に多値を変換する。
a = values なら、aはvaluesの最初の要素に。
一方、a = array の場合(arrayは配列)は、a が配列になればよい。
*a = obj なら a = obj.to_ary と見なす。
a,*b = values なら、aにvaluesの最初の要素を、残りを*b=values[1..-1]として解釈する。a,*b = arrayというものは、この規則に従うと、aにarrayが代入されるか、あるいはエラーだろう。従来のような動作を期待するには、a,*b = *array としてもらうか、MLのパターンマッチングのようなものを新たに導入する。
まだ一貫するには欠けているものがあるし、既存との互換性は確保できないが、混乱するよりはいい。
この記事へのコメント
コメントを書く
この記事へのトラックバック