# (no subject)

**URL:** <https://www.ruby-forum.com/t/no-subject/100578>\
**Category:** Ruby\
**Created:** [July 30, 2006, 12:44pm UTC](https://www.ruby-forum.com/t/no-subject/100578 "2006-07-30T12:44:20Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![kajism](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f475e1/32.png) [@kajism](https://www.ruby-forum.com/u/kajism)\
**Post date:** [July 30, 2006, 12:44pm UTC](https://www.ruby-forum.com/t/no-subject/100578/1 "2006-07-30T12:44:20Z")

</div>

How should I call eval from member function that binds to global  
context?  
Something like

$binding = binding  
class InterpreterCallback  
def methods(expr)  
begin  
return eval(expr, $binding).class.instance\_methods(false).sort  
rescue ScriptError, StandardError  
printf “ERR: %s\n”, $! || ‘exception raised’  
return []  
end  
end  
end

but this does not work when I am calling InterpreterCallback::methods  
from C++ (for example when new local variable in the global context is  
created).

Also I do not understand following

This code:

puts eval(“var” ).class  
puts eval(“var”).class.instance\_methods(false).sort  
var = “”;

produces:

NilClass  
&  
^  
inspect  
nil?  
to\_a  
to\_f  
to\_i  
to\_s  
|

and this code

puts eval(“var” ).class  
puts eval(“var”).class.instance\_methods(false).sort

produces

undefined local variable or method `var’ for main:Object (NameError)

which is exactly what I would expect in the first case also.

Thank you
