けいじゅ@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 <----