From: Remi Gillig Date: 2008-06-14T19:49:22+09:00 Subject: Re: Reset the whole state On Jun 13, 6:09 pm, Robert Klemme wrote: > On 13.06.2008 16:57, Remi Gillig wrote: > > > > > Hello, > > > I just seached about this problem and found two 2 years old threads : > >http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/87... > >http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/3e... > > > Each of these talk about how to reset the whole Ruby state, like > > starting from a clean interpreter but without rerunning it. More or > > less like emptying everything and putting back the predefined > > constants, modules and classes. > > > The first thread has a solution which is using remove_const to not be > > able to create classes anymore but this actually does not work > > properly because you can still do this : > > # class Hello end > > # $hello = Hello > > # Object.instance_eval("remove_const :Hello") > > # h = $hello.new > > > I'm quite surprised that there was nothing about this in over 2 years > > of development. Maybe there are some explanation inside the Ruby > > Hacking Guide but most of it is in Japanese. > > > Anybody has any idea on how to implement this? Thanks. > > I am wondering what you need that for. I guess removal is pretty > complex and thus time consuming because even a freshly started Ruby > interpreter does contain some classes and method definitions. And > creating a process isn't that expensive. > > Having said that, maybe you can look at how Ruby can be embedded in C > programs. Then you could create a new initial context if something like > that exists. > > Cheers > > robert It's actually embedding that I'm using right now. I am using Ruby as a script language for a code editor to perform operations on text etc. There is a script which is loaded when the program loads which contains some classes defined by the user for example. I would like to be able to reload this script without having warnings about constants, having classes mixed together if the user changed the name of a function between the loadings or still having the same global variables. Remi Gillig.