Ruby中的模块加载问题

时间:2013-06-07 23:42:56

标签: ruby class module object-oriented-analysis

如果我只是做一些愚蠢的话,我对Ruby很陌生。我有一种情况,我可以从一个文件而不是另一个文件访问模块的功能。这些文件都在同一目录中。我会尝试尽我所能重新创建代码:

目录结构:

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

LIB / 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

LIB / 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 /模块/ 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)

我现在已经在这几个小时尝试了许多不同的组合,无法弄清楚我哪里出错了。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

generatorFunction是一种类方法。它没有看到实例级方法。 myhelper(由include Helpers引入)是一种实例方法。要解决这个问题,您应该extend Helpers。它的工作方式与include类似,但是会产生类方法。

class FileGenerator
  extend Helpers

end

BTW,名称generatorFunction不是红宝石风格。您应该在snake_case(generator_function)中命名方法。