2013-06-07 2 views
0

Я довольно новичок в Ruby, так голый со мной, если я просто делаю что-то глупое. У меня есть ситуация, когда я могу получить доступ к функциям модуля из одного файла, но не к другому. Эти файлы находятся в одном каталоге. Я попытаюсь воссоздать код лучшее, что я могу:Ошибка загрузки модуля в Ruby

Структура каталогов:

init.rb 
lib/FileGenerator.rb 
lib/AutoConfig.rb 
lib/modules/helpers.rb 

Библиотека/AutoConfig.rb

#!/usr/bin/env ruby 

require 'filegenerator' 
require 'modules/helpers' 

class AutoConfig 
    include Helpers 

    def initialize 
    end 

    def myFunction 
    myhelper #here's the module function 
    end 

    def mySecondFunction 
    FileGenerator.generatorFunction # call to the FileGenerator 
    end 
end 

Библиотека/FileGenerator.rb

#!/usr/bin/env ruby 

require 'modules/helpers' 

class FileGenerator 
    include Helpers 

    def initialize 
    end 

    def self.generatorFunction 
    myhelper #here's the module function that doesn't work 
    end 
end 

lib/modules/helper.rb

#!/usr/bin/env ruby 

module Helpers 
    def myhelper 
     #Do Stuff 
    end 
end 

Файл AutoConfig является основной рабочей лошадкой приложения. Когда он вызывает функцию модуля myhelper, это не дает мне никаких проблем. AutoConfig частично выполняет вызовы FileGenerator.generatorFunction.

FileGenerator.generatorFunction также содержит ту же самую функцию модуля, но по какой-то причине, когда я запускаю программу, я получаю следующее сообщение об ошибке:

filegenerator.rb:26:in `generatorFunction': undefined method `myhelper' for FileGenerator:Class (NoMethodError) 

Я был на этом сейчас в течение нескольких часов, пытаясь много различных комбинаций и не могу понять, где я ошибаюсь. Любая помощь будет оценена по достоинству.

ответ

3

generatorFunction - метод класса. Он не видит методы уровня экземпляра. И myhelper (внесенный include Helpers) является методом экземпляра. Чтобы исправить это, вместо этого вы должны выбрать extend Helpers. Он работает как include, но делает методы класса.

class FileGenerator 
    extend Helpers 

end 

Кстати, название generatorFunction не в стиле рубина. Вы должны называть методы в snake_case (generator_function).

+0

К сожалению, это была опечатка в транскрипции. Обновлен вопрос – voodooGQ

+0

Обновлен ответ –

+0

В этом была проблема! Большое спасибо, и я обязательно поменяю имена методов! – voodooGQ

Смежные вопросы