# Problem accessing variables in module

**URL:** <https://www.ruby-forum.com/t/problem-accessing-variables-in-module/167129>\
**Category:** Ruby\
**Created:** [May 4, 2009, 12:29pm UTC](https://www.ruby-forum.com/t/problem-accessing-variables-in-module/167129 "2009-05-04T12:29:13Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![tbcox23](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b9bd4f/32.png) [@tbcox23](https://www.ruby-forum.com/u/tbcox23)\
**Post date:** [May 4, 2009, 12:29pm UTC](https://www.ruby-forum.com/t/problem-accessing-variables-in-module/167129/1 "2009-05-04T12:29:13Z")

</div>

I keep getting blocked trying to do a very simple thing - I want to  
“include” - in the sense of causing a mere insertion of text - some  
variables and methods, residing in an external file, in my main code. I  
just want my main to read a file and insert what’s in it into the code  
stream and then forget where it came from. Apparently this isn’t  
possible in any way, sadly.

So, trying to play the game according to the rules, I find that a mere  
“require {filename}”, then an “include {module name in that file}”  
doesn’t do it, because the namespaces aren’t merged, as I would have  
expected. (An include that doesn’t include? Huh?)

So, I have learned to use Object::instance\_eval - confusing because I  
don’t have an instance. But never mind that, 'cause it worked. But that  
method only allows me to access module methods (i.e., they aren’t in a  
class). Now I want to access a variable that is set in the module, but  
not in a method or anything else. If I make the variable a constant,  
everything works, but I can’t do that in my application, I need a  
variable. When a mere ordinary variable didn’t work, I tried making it  
an instance variable. No good. Then I tried calling “attr\_reader” in the  
Module. Nope. Nothing works, not even using  
Object::instance\_variable\_get.

I realize a real Ruby programmer would start creating classes everywhere  
and then it would all work (I guess). I’m trying very hard to keep it  
simple, because the concept is simple. I don’t need/want a class. Just  
the variable, which is initialized in the module. Simple idea - not  
simple to do - or at least I haven’t discovered how to do it.

Here’s a code outline.

=== file utils.rb ===

module Utils  
@menu = [{data}] # \<= what I’m trying to access  
def self.meth\_x  
{ code }  
end  
end

=== end file utils.rb ===

=== main ===

Class SN  
require utils.rb  
include Utils  
def meth\_a

# attempt 1 - doesn’t work

Utils::@menu.each do |i|  
{code}  
end

# attempt 2 - doesn’t work

x\_menu = Utils.instance\_variable\_get( “menu” )  
utils\_menu.each do |i|  
{code}  
end  
end  
end  
=== end main ===

Can someone give me the “missing piece” or suggest what I need to do to  
get this working?

Many thanks!

Tom

---

<div class="post-metadata">

**Author:** ![tbcox23](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b9bd4f/32.png) [@tbcox23](https://www.ruby-forum.com/u/tbcox23)\
**Post date:** [May 4, 2009, 1:14pm UTC](https://www.ruby-forum.com/t/problem-accessing-variables-in-module/167129/2 "2009-05-04T13:14:58Z")

</div>

2009/5/4 Tom C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> I keep getting blocked trying to do a very simple thing - I want to  
> “include” - in the sense of causing a mere insertion of text - some  
> variables and methods, residing in an external file, in my main code. I just  
> want my main to read a file and insert what’s in it into the code stream and  
> then forget where it came from. Apparently this isn’t possible in any way,  
> sadly.

That sounds as if you wanted to do

class SN  
eval(File.read(“utils.rb”)) # utils.rb contains method definitions  
etc.  
end

> So, trying to play the game according to the rules, I find that a mere  
> “require {filename}”, then an Â “include {module name in that file}” doesn’t  
> do it, because the namespaces aren’t merged, as I would have expected. (An  
> include that doesn’t include? Huh?)

> I realize a real Ruby programmer would start creating classes everywhere and

You do have classes already. 🙂

> then it would all work (I guess). I’m trying very hard to keep it simple,  
> because the concept is simple. Â I don’t need/want a class. Just the  
> variable, which is initialized in the module. Simple idea - not simple to do
> 
> - or at least I haven’t discovered how to do it.

> Can someone give me the “missing piece” or suggest what I need to do to get  
> this working?

There’s a sample attached which allows do extend individual instances  
as well as include in classes.

Kind regards

robert

---

<div class="post-metadata">

**Author:** ![tbcox23](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b9bd4f/32.png) [@tbcox23](https://www.ruby-forum.com/u/tbcox23)\
**Post date:** [May 5, 2009, 4:04pm UTC](https://www.ruby-forum.com/t/problem-accessing-variables-in-module/167129/3 "2009-05-05T16:04:17Z")

</div>

Robert K. wrote:

> That sounds as if you wanted to do
> 
> > variable, which is initialized in the module. Simple idea - not simple to do
> 
> Kind regards
> 
> robert

Robert, this is exactly what I was looking for. I’m a bit stunned, after  
so many failure to even communicate to others what I was trying to do.  
It’s so straightforward. You got it solved right away. Thanks! This is  
very helpful to be, in my modest efforts to make a tool from which I  
will get a lot use! Thanks for your time and help.

Tom

–

```auto
Tom C., MS MA, LMHC - Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< removed_email_address@domain.invalid >> (email)
<< TomCloyd.com >> (website)
<< sleightmind.wordpress.com >> (mental health weblog)

```
