At 19:13 10/05/2004 +0900, you wrote:
>I propose that the following method be added to Ruby:
>
>class Binding
>    def eval str
>        Kernel.eval str, self
>    end
>end
>
>This makes eval'ing code in a given binding more OO.  So code like
>
>eval "myvar = 120", binding
>
>becomes:
>
>binding.eval "myvar"
>
>which is more in keeping with the general Ruby way, IMHO.
>
>Bill Atkins 

Hi,

For sure the Binding class would deserve some methods, it has
none as of today !

class Binding

  # Evaluate a Ruby source code string in the binding context
  def eval( str ) Kernel.eval( str, self) end

  # Returns the self in the binding context
  def self(); eval( "self") end

  # Returns the local variables defined in the binding context
  def local_variables(); eval( "local_variables") end

  # Returns the Method that was active, if any, when the binding was created
  def method() ...???...

  # Returns the Proc that was active, if any, when the binding was created
  def proc() ... ??? ...

  # Returns the call stack, same format as Kernel##caller()
  def caller( skip = 0 ); eval( "caller( #{skip})") end

  # Returns the value of some rvalue
  def [](x); eval( x.to_s()) end

  # Set the value of some lvalue
  def []=(l,v); eval( "proc {|v| #{l} = v").call( v) end

  # Returns the nature of something, nil if that thing is not defined.
  def defined?(x); eval( "defined? #{x}") end

end

Most methods could be defined for class Proc too I suppose, but I would
prefer a class Proc; def binding() eval( "binding", self) end end

I am adding this to my rcr.rb (the file where I put extensions to standard
classes). Thanks !

Yours,

Jean-Hugues

-------------------------------------------------------------------------
Web:  http://hdl.handle.net/1030.37/1.1
Phone: +33 (0) 4 92 27 74 17