0

我有一种情况,我可以从一个文件而不是另一个文件访问模块的功能。这些文件都在同一个目录中。我将尽我所能重新创建代码:

目录结构:

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

库/文件生成器.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)

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

4

1 回答 1

3

generatorFunction是一个类方法。它看不到实例级方法。并且myhelper(由 引入include Helpers)是一个实例方法。为了解决这个问题,你应该extend Helpers改为。它的工作方式类似于include,但生成类方法。

class FileGenerator
  extend Helpers

end

顺便说一句,这个名字generatorFunction不是红宝石风格的。你应该在snake_case ( generator_function) 中命名方法。

于 2013-06-07T23:45:17.303 回答