[ruby-list:122] Re: iterator by C?

From: matz@... (Yukihiro Matsumoto)
Date: 1996-02-02 08:57:18 UTC
List: ruby-list #122
まつもと ゆきひろ@トヨタケーラムです.

どうも私の説明が悪いんでしょうね.

In message "[ruby-list:121] iterator by C?"
    on 96/02/02, P nakawtse <nakawtse@syrinx.dq.isl.ntt.jp> writes:
|中渡@NTTです.

|  perlは i+=1, よりi++ が少し早いんでしょう? 

perlはそうみたいですね.

| i++って自然数のときsucc(i):iの次の数=i+1.だけどクラス一般では
| operator'++' で定義されたものでは..

C++ではたしかにそうなんですけど,でもなんか変じゃないですか.

Cのレベルでは「変数iの値に1を加える」という変数に対する操作
ですよね.変数の値に対する操作ではなくて.

 i=j=1
 i++

すると

 i -> 2
 j -> 1

になることからも分かります.それをoperator++っていう値に対す
る操作にしてしまうというのは納得がいかないので,採用していま
せん.

| イテレータにいろいろあるわけですね.??

イテレータに限らずrubyのメソッドは rubyで記述されたものとCで
記述されたものがあります.当然Cで記述されたものの方が速いわ
けです.

|私のいっているのはそのことではなくて,あるクラス(自分で定義
|したのではない)をトラバースする時に,whileでトラバースするた
|めのメソッドが用意されていない可能性があるということです.も
|ちろん自分でクラスを定義しなおせば良いことなのですが,面倒で
|しょう?
|−−−−
|
|  例が思いつかないです

えーと,例えば

  while link.next
    処理
    line = link.next
  end

と書きたいのにnextメソッドが提供されていないような場合を考え
ていました.ちょっと不自然すぎる?

まあ,ここまで極端でなくても,上のwhileによる記述よりも

  for i in link
    処理
  end

の方が分かりやすいことは認めて頂けるんではないかと.こっちの
方が高速である可能性もあるし.

                                まつもと ゆきひろ /:|)

In This Thread

Prev Next