Forum: Ruby Real Beginner Question - (NameError)

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
CSZ (Guest)
on 2007-03-21 05:48
Hi !
I'm going my way through a Ruby online tutorial right now and i have
following problem:

I have two files. File one:

wordlist.rb

code_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'
   }

makeSwamp.rb

#!/usr/bin/env ruby

require 'wordlist'

 # Get evil idea and swap in code words
  print "Enter your new idea: "
   idea = gets
   code_words.each do |real, code|
      idea.gsub!( real, code )
   end

# Save the jibberish to a new file
  print "File encoded.  Please enter a name for this idea: "
   idea_name = gets.strip
   File::open( "idea-" + idea_name + ".txt", "w" ) do |f|
      f << idea
   end

When i execute the makeSwamp.rb file i can enter a "new idea" but than i
get:

./makeSwamp.rb:8: undefined local variable or method `code_words' for
main:Object (NameError)

(line 8 is: code_words.each do |real, code| )

Why ??? I've run kdiff and its exactly as in the tutorial... Maybe its
just to late for me..
Harold H. (Guest)
on 2007-03-21 06:02
(Received via mailing list)
On 3/21/07, CSZ <removed_email_address@domain.invalid> wrote:
> Hi !
> I'm going my way through a Ruby online tutorial right now and i have
> following problem:
>

Hello. There is an unfortunate error in the design of that example.
This exact question comes up from time to time on this list. (:

I searched the archives[1] for "Heat-Assisted Living" and came up with
this thread:
http://rubyurl.com/FeV

It looks to have some good answers in it.

Hope that helps,
-Harold

[1]: http://groups.google.com/group/comp.lang.ruby/topics
Eric I. (Guest)
on 2007-03-21 06:05
(Received via mailing list)
On Mar 20, 11:49 pm, CSZ <removed_email_address@domain.invalid> wrote:
> When i execute the makeSwamp.rb file i can enter a "new idea" but than i
> get:
>
> /makeSwamp.rb:8: undefined local variable or method `code_words' for
> main:Object (NameError)
>
> (line 8 is: code_words.each do |real, code| )
>
> Why ??? I've run kdiff and its exactly as in the tutorial... Maybe its
> just to late for me..

When you require (or load) a file, the local variables are not brought
in.  Try changing code_words to a global variable by making it
"$code_words" (in both files).  Or if you think it's more appropriate,
change it to a constant by making it "CodeWords" in both files.

Eric

Are you interested in on-site Ruby training that uses well-designed,
real-world, hands-on exercises? http://LearnRuby.com
This topic is locked and can not be replied to.