如果我只是做一些愚蠢的话,我对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)
我现在已经在这几个小时尝试了许多不同的组合,无法弄清楚我哪里出错了。任何帮助将不胜感激。
答案 0 :(得分:3)
generatorFunction
是一种类方法。它没有看到实例级方法。 myhelper
(由include Helpers
引入)是一种实例方法。要解决这个问题,您应该extend Helpers
。它的工作方式与include
类似,但是会产生类方法。
class FileGenerator
extend Helpers
end
BTW,名称generatorFunction
不是红宝石风格。您应该在snake_case(generator_function
)中命名方法。