[ruby-list:99] Re: control

From: matz@... (Yukihiro Matsumoto)
Date: 1996-01-30 05:35:31 UTC
List: ruby-list #99
まつもと ゆきひろ@トヨタケーラムです.

In message "[ruby-list:98] control"
    on 96/01/30, P nakawtse <nakawtse@syrinx.dq.isl.ntt.jp> writes:
|中渡@NTTです.

| こんな仕組みだったんですね.
| うちは .plでprolog-modeになってしまう..

同じやり方で.plでperl-modeにもできます.

(setq auto-mode-alist (cons '("\\.pl$" . perl-mode) auto-mode-alist))

# 新しいバージョンのemacsでは.plはperl-modeだったような.

|  ところで,
|
|    while expr1  stmt  if expr1 ;
|  は
|    (while expr1  stmt ) if expr1 ;
| それとも
|     while expr1 ( stmt  if expr1) ;
| になるべきなのでしょうか?

実は

 while expr1 stmt if expr2

はrubyではsyntax errorです.

 while expr1; stmt if expr2 end

ならOKかな.セミコロンと`end'が重要です.意味は当然

 while expr1; (stmt if expr2) end

です.ちなみに

  stmt1 if expr1 while expr2

は

  (stmt1 if expr1) while expr2

です.

| もしかして while(expr).stmt なクラスや
|      stmt.while(expr) なメソッドがあるとか..

基本制御構造はメソッドでない方が自然であると思っています.そ
のわりにはイテレータなどというメソッドによる制御構造と呼べな
いことは無いものもありますが.

ちなみにイテレータの応用で,

 def until(cond)
   return if cond
   yield
   retry
 end

などとすると制御構造のメソッドが定義できたりします.

 until(i < 10) {
   処理…
 }

という風に使えます.

In This Thread

Prev Next