[ruby-list:437] Re: Q. repeat

From:
Date: 1996-08-27 11:22:32 UTC
List: ruby-list #437
けいじゅ@SHLジャパンです. 

In [ruby-list :00435 ] the message: "[ruby-list:435] Re: Q. repeat ",
on Aug/27 18:30(JST) matz@caelum.co.jp (Yukihiro Matsumoto) writes:

>これは
>
> 100.times {
>   ...
> }
>
>があります.

やっぱり... 何かあったような気がしたんですよ!!

>|あと, 上記のイテレータは bignumやfloatにはありませんが, 何か理由がある
>|のでしょうか?
>実は上記のイテレータはNumericで定義されています.つまり実際
>にはBignumやFloatにもあります.ドキュメントが古いんです.今

では, 以下は多分バグです:

10000000000.upto(10000000010) {|i|
  print i
}

がエラー出ます. 

>0.99.2用のドキュメントを用意していますから(日本語・英語とも)
>ちょっと待ってください.

期待して待っています(^^;;

>つまり制御構造なのに end で終っていないという意味ですね.

そうなんです.

>どういう風にするのが良いと思いますか? 意見を聞かせてください.

そうですねえ... どうしたもんですかねえ...

>  * 通常の制御構造は文として使われる事が圧倒的に多いが,イテ
>    レータは比較的式として使われる事が多い
>
>     例: grep, sub/gsubなど

gsub(...){...} は利用させてもらいました. 感動しました(^^;;;

>  * ユーザ定義の制御構造は特別な(目立つ)形式の方が望ましいだ
>    ろう

ユーザは制御構造が定義できてはいけないという意見も聞きますが, それはさ
ておき.

>  * 今の形式はイテレータの実態(暗黙のブロック引数が付加され
>    ている)を想像しやすい

使う側にとっては, あまり関係ないのでは...

>  * ruby-modeを使えばちゃんとインデントできるだろう

だからこそ end で終って欲しいんですけどね.

      end
    end
  }
end

じゃなくて

      end
    end
  end
end

という風にあまり考えずに終らせたいです.

>  * 実はイテレータブロックには動的ローカルスコープの導入とい
>    う働きも有り({}の中で初めて代入された変数の有効範囲はそ
>    のブロックの中に限る),それを暗示する働きもある.ちなみ
>    に for では動的ローカルスコープは導入されない

これは...

each(foo) {|elm| ...}

と

for elm in foo
...
end

とでは, 動きが違うことがあるのですか(?_?

>参考までにはるかな昔は
>
>  do iter using foo
>    ...
>  end
>
>という構文でした.ちょっと見慣れない構文ですね.その頃には今
>のイテレータ構文はありませんでした.が,上にあげたような理由
>で今のようになっています.

これって, 引数がある時は

do iter(...) using foo
  ...
end

ですか?

>他の案として,互換性を捨てて今の制御構造を全部 { } を使った
>ものに変更するというものも考えられますが,2年前ならともかく
>今はちょっと受け入れがたいと感じています.

うーん. 私もせっかくなれてきたところだし, ちょっと...

1ついえることは, 

each --> for 

のように alias があれば良いとは思います. そうすれば, 関数的に使う場合
にはそのまま使えますよね.

多分気になっているのは,

10.upto(100) {
  ...
}

のような "本当の"イテレータの時だと思います.

だから, forを拡張すれば良いんじゃないかしら?

例えば, 

for i in 10 do upto(100)
   ...
end

とか... ちょっと無理があるか...

__
..........................................石塚 圭樹@SHLジャパン(株)...
------------->アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----

In This Thread

Prev Next