From: nobu.nakada@... Date: 2002-05-23T17:01:31+09:00 Subject: [ruby-dev:17205] Re: [RCR] Array#rotate{,!} なかだです。 At Thu, 23 May 2002 16:40:54 +0900, Yukihiro Matsumoto wrote: > |Yukihiro Matsumotoさんの > |<1022138041.552884.4151.nullmailer@picachu.netlab.jp>から > |> shiftのように「いくつずらす」という指定もありえますよね。そ > |> の場合はrrotate,lrotateになるのかもしれませんが。いや、逆方 > |> 向は負にすればよいからやっぱり一つのメソッドで十分か。 > | > |引数を回転量にするのなら、 > |正がどちら向きの回転か私には覚えられないので、 > |rrotate,lrotateがいいです。 > > アラビア語ではBiDiによって右と左が逆になるとか... たぶん[]はアラビア語でも変わらないと思うんですが…。ただ本当に 左右なのかなとか思って、あえて左右という言葉は避けたんですが。 > あと、ちゃんと定義した方が良いのは、以下の場合ですね。 > > * rotate!で配列サイズが1以下の場合 > > sort!やreverse!は元の配列を返している。rotate!は? (中田 > パッチはnilを返している) reverse!はnilを返してます。というかそれに合わせたので。あと回転 量が0の場合もありますね。 > * indexが大きかった場合、小さすぎた場合 > > 回転量と考えればlenでmoduloを取るべきだが、indexを先頭に > すると考えるとmoduloを取るのは変かも(中田パッチはエラー > にしてる)。 moduloにするというのは考えてませんでした。除数が正の場合は被除 数が負でもmoduloは定義済みでしたっけ。 At Thu, 23 May 2002 16:47:39 +0900, nagai@ai.kyutech.ac.jp wrote: > 回転量とするなら, > > [1,2,3,4].rotate(4) #=> [1,2,3,4] > > となるべきでしょうし,index なら > > [1,2,3,4].rotate(4) #=> 例外発生 > > となるべきでしょう. > 導入目的にあってるのはどちら? 最初思い付いたのがリングバッファを整形するためなので、たぶん範 囲外の場合というのが念頭になくて、無意識に例外を選んだんだと思 います。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦