Forum: Ruby require just in a context?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
cap (Guest)
on 2006-03-03 05:16
(Received via mailing list)
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. Saynatkari (Guest)
on 2006-03-03 21:02
cap wrote:
> 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
Joel VanderWerf (Guest)
on 2006-03-04 02:44
(Received via mailing list)
E. Saynatkari wrote:
>
> (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...
This topic is locked and can not be replied to.