Project

General

Profile

Actions

Bug #11163

closed

Binding from Method#to_proc.binding cause BUG

Added by ko1 (Koichi Sasada) almost 9 years ago. Updated almost 9 years ago.

Status:
Closed
Target version:
-
[ruby-dev:<unknown>]

Description

Method オブジェクトから、
to_proc で取り出した Proc オブジェクトから、
Binding を取り出したものを使って eval しようとすると、BUG になります。

class C
  D = :D
  def foo
    a = b = c = 123
  end
  def inspect
    "<C object>"
  end
end

C.new.method(:foo).to_proc.binding.eval("p [a, b, c]")

これは、Method#to_proc したときに、環境をテキトーに弄っているため、不整合を起こすものです。

そもそも、上記の例では foo メソッドは実行されていないため、foo の中の環境が取れる、という変な幻想を与える Binding が取れてはいけないのではないかと思います。

というわけで、このような Binding は、どんなものであるべきでしょうか。レシーバは取れる、cref は同じ、ローカル変数は空、くらいがいいのかと思いますが、どうでしょうか。

解決策としては、現状の method_proc() で何かテキトーに弄っているところではなく、proc_binding で、特殊な環境を作るように変更する必要があるのではないかと思います。


Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #10432: wrong receiver of Binding from MethodClosednobu (Nobuyoshi Nakada)Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0