[#7102] Ruby 1.3.4-990611 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.4-990611 is out, check out:

20 messages 1999/06/11

[#7223] Ruby 1.3.4-990625 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.4-990625 is out, check out:

14 messages 1999/06/25
[#7224] -Wl,-rpath on Linux (Re: Ruby 1.3.4-990625) — Ryo HAYASAKA <hayasaka@...21.u-aizu.ac.jp> 1999/06/25

早坂@会津大学です。

[ruby-dev:7048] Re: [BUG] [Re: Local variable in for block]

From: keiju@... (石塚圭樹)
Date: 1999-06-01 06:39:49 UTC
List: ruby-dev #7048
けいじゅ@日本ラショナルソフトウェアです.

In [ruby-dev :7020 ] the message: "[ruby-dev:7020] Re: [BUG] [Re:
Local variable in for block] ", on May/29 01:37(JST) Yukihiro
Matsumoto writes:

>まつもと ゆきひろです
>
>|あと, irbは評価のコンテキストが特殊なものでそれに絡むrubyのバグがあると
>|動作がおかしくなります. 今回もそのパターンです.
>
>えーん,irbはruby泣かせですよねえ.

(^^;;;

すべて

  b = proc{binding}.call

のせいだと思うんですが... いつも感じるのは, proc内のbindingって何でそん
なに扱いが違うの? ってことなんですが....

>|バグ報告:
>
>まずい..と思ったのですが,
>
>|b = proc{binding}.call
>
>のbindingはprocのブロックの内側で呼ばれています.bindingは
>「それが呼ばれた時点の状態」を保存しますから,このbindingを
>使ったevalで初出のローカル変数はブロック内での初出になります
>から,変数がin-block variableになるのは一応仕様通りの挙動に
>なります.

ああ. こっちの意味はなくてて

>一方,forの中で初出のローカル変数が次のevalに持ち越されない
>のはバグです.これは修正しました.

こっちの意味でした.

>で,ローカル変数がすべからくlocal-variable(in-block)になって
>しまう問題をirbでどう解決すべきかについてはまた相談しましょ
>うか.妥協できる違いのような気もしますが.

そうですねえ. こっちはしょうがないなって感じていますが... 
でも, irbのトップレベルで 

  foo = 1
  defined? foo
==
local-variable(in-block)

はちょっと悲しい気もしますね.

  proc{binding}.call

を使わないで以下の条件を満たすバインディングでいいのがあればよいんですが...

1. mainオブジェクトがself
2. ローカル変数はトップレベルとは共有しない

ところで, 

b0 = proc{binding}.call
#b0 = binding
b = eval "class Object; binding; end", b0
eval "foo = 1", b0
p eval "defined? foo", b
==
"local-variable(in-block)"
# nil

ってなるんですが, これって変ですよね?

__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju@rational.com <<---

In This Thread