2014-09-21 7 views
1

Я новичок в Ruby, используя eclipse, DLTK ruby ​​plugin и Ruby 2.0. Я создал файл модуля Ruby, под названием AModule.rb, который имеет код:Понимание модулей ruby ​​

module AModule 
    aConstant = 7 
end 

Это вызывается из сценария теста рубина в одном проекте:

require 'AModule' 
puts AModule::aConstant 

Во второй строке кода выше , я получаю ошибку in '<main>': undefined local variable or method 'aModule' for main:Object (NameError)

Я следовал за моим учебником по кодекадемии, поэтому я не ожидал, что это произойдет. Какую ошибку я здесь делаю?

PS: На самом деле, я хотел назвать свой файл модуля ** aM ** odule.rb, а не ** AM ** odule.rb. Но плагин DLTK спокойно делает первый алфавит заглавным. Может ли это быть ошибкой?

+0

Невозможно воспроизвести. – sawa

+0

@ sawa - На самом деле, я определил его. Я сделал небольшую ошибку в нижнем регистре. Я исправил это сейчас. Такая же ошибка сохраняется. Можете ли вы довести меня до нуля, если не видите ошибки или недостатка в моем вопросе? Благодарю. –

+0

Мой комментарий относится к вашему вопросу после редактирования (мой удаленный ответ был применен к вашему вопросу перед редактированием). Я не буду следовать вашей просьбе, чтобы проголосовать. Вы не должны просить об этом. Кроме того, как я писал, он не может быть воспроизведен. – sawa

ответ

1

Ваша проблема в том, что имя константы должно начинаться с UpperCaseLetter. В противном случае Ruby будет думать об этом как о локальной переменной. Так что же с этим не так? Короткий ответ: все дело в сфере. Локальные переменные видны только в их лексической области. Константа - совсем другая вещь. Постоянный доступ всегда можно получить через так называемый namespace-resolution operator (::).

Подробнее о рубиновом прицеле here.

0

Я использовал windows cmd вместо Eclipse IDE. Я покажу шаги, которые я использовал, чтобы найти ошибки для кода и, наконец, исправить их. Плагин DLTK здесь не виноват. Файл модуля и тестовый скрипт находятся в одной папке.

УРОК - Имя модуля и постоянное имя в модулях ДОЛЖНЫ начинаться с заглавной буквы. Почему, я не знаю.

aModule.rb

module aModule 
aConstant = 7 
end 

test.rb

require 'aModule' 
puts aModule::aConstant 

CMD: кд в папку test.rb и ruby Test.rb ошибка: `` требуют ': не может загрузить такой файл - tokenizer.rb (LoadError) ` помощь:Ruby 'require' error: cannot load such file

Ruby 1.9 has removed the current directory from the load path, and so you will need to do a relative require on this file, as Pascal says:

require './tokenizer' 

There's no need to suffix it with .rb, as Ruby's smart enough to know that's what you mean anyway.

Я сделал следующие изменения:

test.rb

require './aModule' 
puts aModule::aConstant 

CMD:ruby Test.rb ошибка:class/module name must be CONSTANT (SyntaxError) в aModule.rb помощь:NameError in Ruby

Я сделал следующие изменения:

aModule.rb

module AModule # capital 
aConstant = 7 
end 

test.rb

require './AModule' 
puts AModule::aConstant 

CMD: рубиновый тест.rb Ошибка:undefined method 'aConstant' for AModule:Module (NoMethodError) help: Используется по вышеуказанной ссылке. Я думаю, что константу нужно также назвать капиталом.

Заключительный рабочий код:

aModule.rb

module AModule # capital 
AConstant = 7 # capital 
end 

test.rb

require './AModule' 
puts AModule::AConstant 

WTF является рубин, как это ??? И почему, черт возьми, мне нужно добавить ./ перед именем модуля, когда он находится в той же папке, что и тестовый скрипт?

+1

'. /' Объяснил [здесь] (http://stackoverflow.com/questions/2900370/why-does-ruby-1-9-2-remove-from-load-path-and-whats-the-alternative) – user2422869