«前の日記(2006年03月22日) 最新 次の日記(2006年03月24日)» 編集

Matzにっき


2006年03月23日 [長年日記]

_ [Ruby] 多値

寝ても覚めてもRubyのことを考えているわけだ。

最近は多値について考えている。 真の多値(LispやSchemeにあるようなの)を導入しようと考えていたのだが、 現状、単値の配列を多重代入で受けるケースがあまりにも多いので (たとえばString#scanの結果は多値であるべきか/配列であるべきか)、 いくつかのコーナーケースに目をつぶって配列が多値であるとするのはどうだろうかと 思うようになった。

コーナーケースとは

  • 多重代入右辺に単一のsplat operator(単項*)が存在した時に 展開ではなく「配列であることの確認」になる
  • return, yield, break, nextでも同様
  • yieldはyield []と同じ。yield 1はyield [1]と同じ。 でも、yield [1]はyield [[1]]ではなく、yield [1]のまま。

である。特に最後のが邪悪だ。

もっとも、実際問題として多重代入の右辺が単一の*であることは希だし、 yield [1]が[[1]]でなく[1]を渡すことで起きる不具合はほとんどないはず。

ここは統一性よりも実用性を選ぶべきか...。

実際にコードを動かしてみないとわからないのでハックしてみよう。


«前の日記(2006年03月22日) 最新 次の日記(2006年03月24日)» 編集