無限ループを回すのに、loop do と while true はどう使い分けたらいいのか不思議に思ったので検索したら、まつもと ゆきひろ さん自身の解説が見つかった。
loop do と while true の二つのプログラムを動作させてみると、loop do では、変数 abc に数値を代入しているはずなのに、次に abc を評価させてもエラーになってしまう。 C:\Users\******>irb irb(main):001:0> loop do irb(main):002:1* print "-> ", eval(gets), "\n" irb(main):003:1> end abc = 123 -> 123 abc NameError: undefined local variable or method `abc' for main:Object irb(main):004:0> while true irb(main):005:1> print "-> ", eval(gets), "\n" irb(main):006:1> end abc = 123 -> 123 abc -> 123 exit loop の場合はブロックなので、内部で定義された変数のスコープはブロック内に限られてしまうらしい。loop do というのは、loop という関数を何回も呼び出し続ける動作をするのだろう。したがって、loop 内の変数は、loop 外の変数の名前空間を汚さない。snrb で気を使ってアンダースコアー付きの変数にしていたのは無駄骨だったのだ。 プログラム言語というのも作者の意図が分からないとうまく使いこなせないのだろうか。しかし、ソースは読めないし....
by tnomura9
| 2008-10-12 08:26
| Ruby
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||