Справка по модулю Ruby - Ищете не в том каталоге? - PullRequest
0 голосов
/ 05 июня 2011

Привет всем!У меня проблемы с пониманием модулей - у меня есть два файла, один с именем «modfile.rb» с модулем, а другой с именем «main.rb», который выполняет код:

# modfile.rb  
module Module1
  def method1
    puts "SUCCESS!"
  end
end

# main.rb  
require 'modfile'
Module1.method1

К сожалению, вместо этогоУСПЕХА!Появившись на экране, я получаю следующее:

<internal:lib/rubygems/custom_require>:29:in 'require': no such file to load -- modfile (LoadError)
  from <internal:lib/rubygems/custom_require>:29:in 'require'
  from main.rb:1:in '<main>'

Я думаю (хотя я могу и ошибаться), что Ruby ищет файл lib / .... в каталоге Ruby на моем компьютере, в то время как modfile.rb сохраняется в том же каталоге, что и main.rb.Как мне исправить эту проблему (кроме перемещения файла модуля?)

PS.В одном руководстве было предложено добавить строку «require 'rubygems», но я уже сделал и получил ту же ошибку.

Ответы [ 2 ]

1 голос
/ 05 июня 2011

Проверьте различия между require и require_relative в Ruby: require vs require_relative - передовой метод для обхода обхода в Ruby <1.9.2 и> = 1.9.2

В Ruby 1.9 каталог . был удален из пути поиска.Чтобы решить эту проблему, они добавили require_relative.

0 голосов
/ 05 июня 2011

Если modfile.rb и main.rb находятся в одном каталоге, убедитесь, что вы вызываете main.rb из каталога, в котором он находится, то есть:

ruby main.rb

Поскольку я считаю, что это каталог, в котором интерпретатор Ruby будет искать любые требуемые файлы.

Редактировать : как указывает @ the-tin-man, поведение для Ruby 1.9 изменилось.

Чтобы быть в полной безопасности, вы можете сделать:

require File.join(File.dirname(__FILE__), "modfile")

Еще одна вещь:

def method1

... должно быть:

def self.method1

... поскольку вы вызываете метод как метод уровня класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...