[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000088] Re: gtrb & multi-D array



ごとけんです

In message "[dennou-ruby:000087] Re: gtrb & multi-D array"
    on 99/09/06, Takeshi Horinouchi <horinout@xxxxxx> writes:
>負のインデックスが使えると、配列が前からも後ろからも対等にアクセ
>スできるのが嬉しい。一方、差分を取ったりということから考えると、
>i=0 で x[i-1] が nil 等にならないとバグの温床になるかもしれない。
>
>私としては、前者を重視して負のインッデクスが欲しいに一票。また、
>rubyに組込みの配列クラス Array の負のインッデクス解釈と同じにな
>るので、変えない方がユーザーの混乱が減るし、すっきりするとも思い
>ます。

僕もそう思います。相対インデックスによるアクセス方があるとい
いのかも知れませんね。

>>> 我々の用途としては,可能なかぎり nil に対する演算を再定義して, 
>>> nil に対してどんな演算をしてもいいけれど(エラーにはならない),
>>> 結果は必ず nil というようにしといたほうがいいでしょう.
>
>場合によっては、変な救済策をせずエラーにさせるのがバグを避けるた
>めにもいいのでは。具体的な問題に即して考ることにしましょう。

僕も nil は基本的に暗黙の型変換をしない方がよいと思います。

ただ、

>>> それとも,Ruby の nil と,我々の用途としての 
>>> nil (undef あるいは NaN) は区別しておいたほうがいいでしょうかね?
>
>それって、配列インデックスがいけない値だったら nil でなく、別の
>を返すとかですか? 本当に必要でない限り避けたい様な気がします。

これについてはちょっと悩む所で、undef や NaN に相当するモノ
はあった方がよいやも知れません。ただ undef は予約語なので、
名前を変える必要があります。また NaN は Float のオブジェクト
として存在します。リテラルはありませんが、1.0/0*0 で作れます。

class Numeric
  class UndefinedValue
  end

  Undef = UndefinedValue.new

  def udef
    Undef
  end
end

-- gotoken