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.
~/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-forum.com/\.
David Just wrote:
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
···
--
Posted via http://www.ruby-forum.com/\.
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
···
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/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.