[ruby-list:101] Re: Bikkuri.
From:
matz@... (Yukihiro Matsumoto)
Date:
1996-01-30 07:14:34 UTC
List:
ruby-list #101
まつもと ゆきひろ@トヨタケーラムです.
びっくりなさいましたか?
In message "[ruby-list:100] Bikkuri."
on 96/01/30, P nakawtse <nakawtse@syrinx.dq.isl.ntt.jp> writes:
|中渡@NTTです.
| def until(cond)
| return if cond
| yield
| retry
| end
|until(i < 10) { print i;}
|
| をやったら
|
|-:7: undefined method `i' for main(Object)
| といわれました..
あ,すいません.iは初期化しないといけません.ローカル変数は
初期化しないとメソッド呼出と見なされるんです.
def until(cond)
return if cond
yield
retry
end
i=0
until(i < 10) { print i; i+=1 }
とでもしてください.
| でもこうなったらなんでもありですね??. ということは
| def while(cond) ... end とオーバロードもできるのですか?
「なんでもあり」はそうなんですけど,イテレータには以下の制限
があります.
(1) あくまでもメソッドであるので予約語は使えない
(2) 実行するブロックはひとつしか指定できない
1からwhile, if, case...など既存の制御構造は再定義できません.
あ,WHILE()とか名前を変えればできますが.それに2からif/else
やcaseなどのような複数のブロックを受ける制御構造もユーザ定義
できません.