[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Using 'require' with modules in the same folder

Fernando Cacciola

11/6/2007 12:01:00 PM

Hi people,

I've modularized my very first ruby program (a port of a bash script).

However, if I use 'load' and the target program is loaded multiple times
(indirectly), I get warnings about redefinition of constants, etc
(understandably)

But if I try to use 'require', it searches for the program in the ruby
distribution. Is there a way to specify within the top level script itself
where to search?

TIA


--
Fernando Cacciola
SciSoft
http://fcacciola....



3 Answers

mortee

11/6/2007 12:45:00 PM

0

Fernando Cacciola wrote:
> Hi people,
>
> I've modularized my very first ruby program (a port of a bash script).
>
> However, if I use 'load' and the target program is loaded multiple times
> (indirectly), I get warnings about redefinition of constants, etc
> (understandably)
>
> But if I try to use 'require', it searches for the program in the ruby
> distribution. Is there a way to specify within the top level script
> itself where to search?

You can use relative/absolute paths with require. Combined with
__FILE__, more precisely File.dirname(__FILE__), you can require other
files relative to your current one.

mortee


Fernando Cacciola

11/6/2007 12:45:00 PM

0

Fernando Cacciola wrote:
>
> But if I try to use 'require', it searches for the program in the ruby
> distribution.
Never mind... the current folder is included in the search path, I just got
confused by an error message from the loaded program.

>Is there a way to specify within the top level script
> itself where to search?
>
FWIW

$: << "additional_path"

seems to do it, according to "Programming ruby"


--
Fernando Cacciola
SciSoft
http://fcacciola....



Xavier Noria

11/6/2007 12:55:00 PM

0

On Nov 6, 2007, at 1:00 PM, Fernando Cacciola wrote:

> Hi people,
>
> I've modularized my very first ruby program (a port of a bash script).
>
> However, if I use 'load' and the target program is loaded multiple
> times (indirectly), I get warnings about redefinition of constants,
> etc (understandably)
>
> But if I try to use 'require', it searches for the program in the
> ruby distribution. Is there a way to specify within the top level
> script itself where to search?

Yes, there's a standard idiom for that:

$:.unshift(File.dirname(__FILE__))

which means: prepend to the list of directories where libraries are
searched ($:) the directory where this file lives. Note that does not
assume the directory is the current working directory, since __FILE__
points to the containing file, no matter how is being evaled.

-- fxn