[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

new to ruby, "requier" not working?

David Just

12/29/2005 4:16:00 AM

Hello,

I'm trying to learn ruby from the Poignant guide to Ruby
(http://poignantguide.net/ruby/chap...) 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.



5 Answers

Archie Call

12/29/2005 5:22:00 AM

0

> ~/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

--
Posted via http://www.ruby-....


Justin Collins

12/29/2005 5:26:00 AM

0

David Just wrote:
> Hello,
>
> I'm trying to learn ruby from the Poignant guide to Ruby
> (http://poignantguide.net/ruby/chap...) 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

--
Posted via http://www.ruby-....


Joel VanderWerf

12/31/2005 2:12:00 AM

0


See also:

http://groups.google.com/group/comp.lang.ruby/browse_frm/thread/1adec0...

--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407


Gregory Brown

12/31/2005 6:40:00 AM

0

On 12/29/05, Justin Collins <collinsj@seattleu.edu> wrote:
> David Just wrote:
> > Hello,
> >
> > I'm trying to learn ruby from the Poignant guide to Ruby
> > (http://poignantguide.net/ruby/chap...) 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.

actually, you could use an instance variable too @words = { .. }
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 = "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 :)