new to ruby, "requier" not working?

D

David Just

Hello,

I'm trying to learn ruby from the Poignant guide to Ruby
(http://poignantguide.net/ruby/chapter-4.html) and have run into a
problem. In chapter 4 the simple word replacement example is the
first use of the require statement. It does not work for me. I'm on
OS 10.3, ruby 1.8.2 and my directory structure is :

~/projects/test.rb
~/projects/wordlist.rb


test.rb starts with:
require 'wordlist'

and wordlist.rb just has:
words = {
'starmonkeys' => 'Phil and Pete, those prickly chancellors of the
New Reich',
'catapult' => 'chucky go-go', 'firebomb' => 'Heat-Assisted Living',
'Nigeria' => "Ny and Jerry's Dry Cleaning (with Donuts)",
'Put the kabosh on' => 'Put the cable box on'
}

When i try and run test.rb it says that words is an undefined variable.
If i put the definition of words directly into the test.rb file it
works just fine.

I'm really frustrated with this so i could really use some advice.
I've tried all the permutations of require "wordlist", require
"wordlist.rb" require 'wordlist.rb' require "./wordlist.rb" and
nothing works. I can't get much farther until i figure out how to get
require working.

Thanks,
Dave.
 
A

Archie Call

~/projects/test.rb
~/projects/wordlist.rb


test.rb starts with:
require 'wordlist'

and wordlist.rb just has:
words = {
'starmonkeys' => 'Phil and Pete, those prickly chancellors of the
New Reich',
'catapult' => 'chucky go-go', 'firebomb' => 'Heat-Assisted Living',
'Nigeria' => "Ny and Jerry's Dry Cleaning (with Donuts)",
'Put the kabosh on' => 'Put the cable box on'
}

When i try and run test.rb it says that words is an undefined variable.
If i put the definition of words directly into the test.rb file it
works just fine.

Dave, I am a newbie also. From the manual "require" and "load" are
similar. Maybe try "load 'wordlist.rb'". Possibly your default
directory is not ~/projects/ so the file cannot be found.

...Arch
 
J

Justin Collins

David said:
Hello,

I'm trying to learn ruby from the Poignant guide to Ruby
(http://poignantguide.net/ruby/chapter-4.html) and have run into a
problem. In chapter 4 the simple word replacement example is the
first use of the require statement. It does not work for me. I'm on
OS 10.3, ruby 1.8.2 and my directory structure is :

~/projects/test.rb
~/projects/wordlist.rb


test.rb starts with:
require 'wordlist'

and wordlist.rb just has:
words = {
'starmonkeys' => 'Phil and Pete, those prickly chancellors of the
New Reich',
'catapult' => 'chucky go-go', 'firebomb' => 'Heat-Assisted Living',
'Nigeria' => "Ny and Jerry's Dry Cleaning (with Donuts)",
'Put the kabosh on' => 'Put the cable box on'
}

This has come up on the list before...
'words' needs to be a global variable or constant. It's basically a typo
in the tutorial.
Changing it to Words will get you a constant, changing it to $words will
get you a global variable.

When you require a file, the local variables in that file stay in that
scope, and are not imported into the current scope. To be able to access
them, you must make them global.


-Justin
 
G

Gregory Brown

This has come up on the list before...
'words' needs to be a global variable or constant. It's basically a typo
in the tutorial.
Changing it to Words will get you a constant, changing it to $words will
get you a global variable.

When you require a file, the local variables in that file stay in that
scope, and are not imported into the current scope. To be able to access
them, you must make them global.

actually, you could use an instance variable too @words =3D { .. }
works just fine. If you don't intend to change it, use a constant.

Otherwise, you can use an instance variable which is generally better
than a global.

sandal@karookachoo:~/Shared$ cat foo.rb
@something =3D "hello"
sandal@karookachoo:~/Shared$ ruby -e "require 'foo'; puts @something"
hello

Hope this helps
-Greg

PS: Has anyone noticed that my code examples seem to come from a
different shell EVERY time? I need to learn to stick to a machine for
more than a week :)
 

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

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,074
Latest member
StanleyFra

Latest Threads

Top