# Confused with "include" and require

**URL:** <https://www.ruby-forum.com/t/confused-with-include-and-require/192240>\
**Category:** Ruby\
**Created:** [July 26, 2010, 8:35pm UTC](https://www.ruby-forum.com/t/confused-with-include-and-require/192240 "2010-07-26T20:35:22Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![studlee2](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/278dde/32.png) [@studlee2](https://www.ruby-forum.com/u/studlee2)\
**Post date:** [July 26, 2010, 8:35pm UTC](https://www.ruby-forum.com/t/confused-with-include-and-require/192240/1 "2010-07-26T20:35:22Z")

</div>

I am getting an error when I include or require a file.

My code was getting too long for one file, so I attempted to separate  
out one section into another file, and then “load” the file into the  
main file at the appropriate place.

The main body of my ruby script is /home/holocene/ruby/q.rb  
The load’ed file is /home/holocene/ruby/questionsaddquestions.rb

The error I am getting is:  
/home/holocene/ruby/questionsaddquestions.rb:10: undefined local  
variable or method `statequestions' for main:Object (NameError) from ./q.rb:44:in`load’  
from ./q.rb:44

The code before the load, creates the instance “statequestions”, and the  
code in the load’ed file acts upon the instance “statequestions”.

The error tells me that the loaded text does not know the instance has  
been created. (Proved because when I re-insert the loaded text, and #  
out the load, it works)

Why am I getting an error? I thought “load” essentially is a substitute  
for keyed text, as opposed to ‘require’.

Best Regards,  
Steve.

---

<div class="post-metadata">

**Author:** ![studlee2](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/278dde/32.png) [@studlee2](https://www.ruby-forum.com/u/studlee2)\
**Post date:** [July 26, 2010, 9:23pm UTC](https://www.ruby-forum.com/t/confused-with-include-and-require/192240/2 "2010-07-26T21:23:49Z")

</div>

On Jul 26, 2010, at 8:40 PM, Steve P. wrote:

> /home/holocene/ruby/questionsaddquestions.rb:10: undefined local
> 
> Why am I getting an error? I thought “load” essentially is a substitute  
> for keyed text, as opposed to ‘require’.

From the documentation of ‘load’[1]:

“In no circumstance will any local variables in the loaded file be  
propagated to the loading environment.”

There are other, better ways to do this for example by separating your  
logic into classes and then get the program going from a small main  
program. Any tutorial about moderately complex ruby programs should  
illustrate how to do this.

require and load do not behave like PHPs #include at all.

Regards,  
Florian

[1] [module Kernel - RDoc Documentation](http://ruby-doc.org/core/classes/Kernel.html#M005940)

---

<div class="post-metadata">

**Author:** ![studlee2](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/278dde/32.png) [@studlee2](https://www.ruby-forum.com/u/studlee2)\
**Post date:** [July 27, 2010, 2:41am UTC](https://www.ruby-forum.com/t/confused-with-include-and-require/192240/3 "2010-07-27T02:41:35Z")

</div>

Florian,

As you indicated, I put my classes in files and then require’d, them and  
it works, of course.

I guess as I attain experience, the seeming restrictive way that  
“require” works, will seem great. I was naive in thinking that arbitrary  
code could be “include”-ed.

Best Regards  
Steve.

Florian G. wrote:

> On Jul 26, 2010, at 8:40 PM, Steve P. wrote:
> 
> > /home/holocene/ruby/questionsaddquestions.rb:10: undefined local
> > 
> > Why am I getting an error? I thought “load” essentially is a substitute  
> > for keyed text, as opposed to ‘require’.
> 
> From the documentation of ‘load’[1]:
> 
> “In no circumstance will any local variables in the loaded file be  
> propagated to the loading environment.”
> 
> There are other, better ways to do this for example by separating your  
> logic into classes and then get the program going from a small main  
> program. Any tutorial about moderately complex ruby programs should  
> illustrate how to do this.
> 
> require and load do not behave like PHPs #include at all.
> 
> Regards,  
> Florian
> 
> [1] [module Kernel - RDoc Documentation](http://ruby-doc.org/core/classes/Kernel.html#M005940)
