[quesion] require just in a context?

C

cap

Can I make some libraray just work in a context ?

I add a new ruby file into my app using "require 'mathn'" but i don't
want every ruby file to use the 'mathn', how can I do it?
 
E

E. Saynatkari

cap said:
Can I make some libraray just work in a context ?

I add a new ruby file into my app using "require 'mathn'" but i don't
want every ruby file to use the 'mathn', how can I do it?

Well, anytime you call #require, the effect will be global.
You can delay the call until a certain point in your program
(possibly useful if there is a possibility that it would not
be loaded at all) since #require is just a method. For example,

def foobar(x, y)
require 'mathn'
# ...
end

Would be fine (but would still have an effect just like if
you did it at the top of the file).

As an alternative, you could wrap the loaded file into a
module either using #load which can use an anonymous module
(see the docs) or a library such as Script (see RAA) which
uses a named module. This approach might not work with mathn
or anything else that modifies existing classes.


E
 
J

Joel VanderWerf

E. Saynatkari said:
Well, anytime you call #require, the effect will be global.
You can delay the call until a certain point in your program
(possibly useful if there is a possibility that it would not
be loaded at all) since #require is just a method. For example,

def foobar(x, y)
require 'mathn'
# ...
end

Would be fine (but would still have an effect just like if
you did it at the top of the file).

As an alternative, you could wrap the loaded file into a
module either using #load which can use an anonymous module
(see the docs) or a library such as Script (see RAA) which
uses a named module. This approach might not work with mathn
or anything else that modifies existing classes.

Nope. If you Kernel#load or Module#module_eval a file which requires
mathn, the effect will still be global.

$ ruby -e 'load "foo.rb"; p 1/2'
1/2
$ ruby -e 'm=Module.new; m.module_eval(File.read("foo.rb")); p 1/2'
1/2
$ ruby -v
ruby 1.8.4 (2005-12-24) [i686-linux]

I think what you want is something called behaviors. See the list
archives...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top