# Fxri

**URL:** <https://www.ruby-forum.com/t/fxri/87481>\
**Category:** Ruby\
**Created:** [March 2, 2007, 10:05pm UTC](https://www.ruby-forum.com/t/fxri/87481 "2007-03-02T22:05:33Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 2, 2007, 10:05pm UTC](https://www.ruby-forum.com/t/fxri/87481/1 "2007-03-02T22:05:33Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 2, 2007, 10:30pm UTC](https://www.ruby-forum.com/t/fxri/87481/2 "2007-03-02T22:30:37Z")

</div>

On 3/2/07, removed\_email\_address@domain.invalid [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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?

1. You want to #load the file, not #require the file. You MUST use the  
.rb extension with #load.

-austin

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 2, 2007, 11:05pm UTC](https://www.ruby-forum.com/t/fxri/87481/3 "2007-03-02T23:05:41Z")

</div>

Alle venerdì 2 marzo 2007, removed\_email\_address@domain.invalid 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

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 2, 2007, 11:06pm UTC](https://www.ruby-forum.com/t/fxri/87481/4 "2007-03-02T23:06:41Z")

</div>

Great, thanks.
