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.
on 2007-03-02 22:05
on 2007-03-02 22:30
On 3/2/07, email@example.com <firstname.lastname@example.org> wrote: > Hi, > > I'm using fxri and I have required a ruby file as follows: > > require "c:\myWork\motor.rb" 1. You don't generally want to use Windows-style paths at all. 2. You don't generally want to use absolute paths at all. 3. You don't generally want to use the .rb extension with #require. > My question is, how do I reload this file when I make changes? 3. You want to #load the file, not #require the file. You MUST use the .rb extension with #load. -austin
on 2007-03-02 23:05
Alle venerdì 2 marzo 2007, email@example.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
on 2007-03-02 23:06