'Require' вызывает ошибку NameError - PullRequest
1 голос
/ 06 июля 2011

Я сохранил следующий хеш под file2.rb

codewords = {'starmonkeys' => 'Five edged primates.'}

* Некоторые из вас могут узнать об этом из Poignant Guide!

И следующее в file1.rb:

if __FILE__ == $0
    require File.expand_path('C:\Users\COMPAQ\My Documents\Aptana Studio Workspace\why the lucky stiff made me do this\file2.rb', __FILE__)

    print "Enter your secret sentence."
    idea = gets

    codewords.each do | real , code|
      idea.gsub!( real , code )
    end

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

Я вызываю NameError: file.rb: 7: in <main>': undefined local variable or method codewords 'для main: Object (NameError)

Что я делаю неправильно, что поднимает это?

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

Насколько я знаю, объявления переменных ограничиваются файлом, в котором они определены. Это означает, что они в основном не существуют вне области действия файла. Чтобы преодолеть этот пробел, вам может потребоваться использовать константу, класс или модуль или их комбинацию для целей пространства имен. Например:

# file2.rb

module Codewords
  CODEWORDS = { ... }
end

Позже вы можете потребовать и использовать это так:

include Codewords

CODEWORDS.each do |real, code|
  # ...
end
0 голосов
/ 06 июля 2011

вы можете объявить кодовые слова глобальными, а затем обращаться к ним позже, ссылаясь на них как

         $codewords = {'starmonkeys' => 'Five edged primates.'} #file2.rb

Затем в file1.rb:

          codewords.each do | real , code|
            idea.gsub!( real , code )
          end
...