[#380] bug report#3 and request#5 — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
1 message
1996/08/06
[ruby-list:435] Re: Q. repeat
From:
matz@... (Yukihiro Matsumoto)
Date:
1996-08-27 09:30:16 UTC
List:
ruby-list #435
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は比較的良いという
# のは昔から分かっているのですが….
まつもと ゆきひろ /:|)