Alle venerd2 marzo 2007, zeeman11 / gmail.com ha scritto:
> Hi,
>
> I'm using fxri and I have required a ruby file as follows:
>
> require "c:\myWork\motor.rb"
>
> My question is, how do I reload this file when I make changes?
>
> Thanks.

I assume you're speaking about the irb session embedded in fxri. If I'm wrong, 
my answer won't be very useful.

I think the cleanest way to reload a file is to use the load method:

load 'c:\myWork\motor.rb'

(note that with load you need to specify the extension).
Different from require, load doesn't check whether the file already is in $" 
(the list of required files), although this is not explicitly said in the ri 
documentation, and can't load C extensions.

Another way to reload the file should be to remove it from $" and use require.

In both cases, you must be careful. Suppose the file a.rb contains the 
following:

---File a.rb---

class C
 def method1
  "method1"
 end

 def method2
  "method2"
 end
end

In the interactive session, you do:

require 'a'  #you could also do load 'a.rb'
c=C.new
c.method1
=> "method1"

c.method2
=> "method2"


Then you modify a.rb:

---File a.rb modified---
class C

 def method2
  "method2"
 end

end #you removed the definition of method1

You go back to the interactive session and type

c.method2
=> "method2"

c.method1 #you'd expect a NoMethodError, since the method has been removed.
=> "method1"

c1=C.new #create a new instance of C using the last definition

c1.method1
=>NoMethodError

The point is that loading the file again doesn't clear whatever it was defined 
in it the first time it was loaded. I think (but I'm only guessing) that 
loading for a second time a file which contains a class or a module looks a 
bit like (but it's different from) reopening the class or module. For 
instance, if in the modified a.rb you'd added the line 

undef_method :method1

inside the definition of C, then calling c.method1 would have raised a 
NoMethodError.


I hope all this helps

Stefano