In message "[ruby-list:434] Q. repeat" on 96/08/27, Keiju ISHITSUKA <keiju / shljapan.co.jp> writes: | |けいじゅ@SHLジャパンです. |はありますが, n回だけ繰り返す | |n.repeat { | ... |} | |が, ないようです. リクエストさせて下さい. これは 100.times { ... } があります. |あと, 上記のイテレータは bignumやfloatにはありませんが, 何か理由がある |のでしょうか? 実は上記のイテレータはNumericで定義されています.つまり実際 にはBignumやFloatにもあります.ドキュメントが古いんです.今 0.99.2用のドキュメントを用意していますから(日本語・英語とも) ちょっと待ってください. |これが, ruby の構文のポリシイとマッチしていないと感じるのですが... つまり制御構造なのに end で終っていないという意味ですね. |foo.each {|elm| | ... |} | |が, | |for elm in foo | ... |end | |となるように, 一般のイテレータでもどうにかなりませんか? どういう風にするのが良いと思いますか? 意見を聞かせてください. 一応,現時点では * 通常の制御構造は文として使われる事が圧倒的に多いが,イテ レータは比較的式として使われる事が多い 例: grep, sub/gsubなど * ユーザ定義の制御構造は特別な(目立つ)形式の方が望ましいだ ろう * 今の形式はイテレータの実態(暗黙のブロック引数が付加され ている)を想像しやすい * ruby-modeを使えばちゃんとインデントできるだろう * 実はイテレータブロックには動的ローカルスコープの導入とい う働きも有り({}の中で初めて代入された変数の有効範囲はそ のブロックの中に限る),それを暗示する働きもある.ちなみ に for では動的ローカルスコープは導入されない とかいうような理由で今のようになっています. 参考までにはるかな昔は do iter using foo ... end という構文でした.ちょっと見慣れない構文ですね.その頃には今 のイテレータ構文はありませんでした.が,上にあげたような理由 で今のようになっています. 他の案として,互換性を捨てて今の制御構造を全部 { } を使った ものに変更するというものも考えられますが,2年前ならともかく 今はちょっと受け入れがたいと感じています. # begin,whenは {} と相性が悪く,while,ifは比較的良いという # のは昔から分かっているのですが…. まつもと ゆきひろ /:|)