[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などのような複数のブロックを受ける制御構造もユーザ定義
できません.

In This Thread

Prev Next