我有这个:
module CommonMethods
def createLog()
$log = Logger.new(logPath)
puts "Doesn't seem to fire..."
$log.level=Logger::INFO
return $log
end
在shared.rb中。
我试图从另一个脚本调用它,但最终需要从多个脚本调用它,如下所示:
require_relative "shared"
include CommonMethods
CommonMethods.createLog
但是,它似乎并没有做任何事情。
我尝试创建$log
作为局部变量,并作为全局变量,但不是“返回”它。我尝试了所有我能想到的东西(我来自C#背景)我无法做到。
在这个例子中,我试图调用外部方法来创建“log”,然后我可以在本地使用它。我将使用许多其他方法做同样的事情,但直到我可以使方法调用正确。
有人可以帮忙吗?
答案 0 :(得分:1)
模块是为组织方法而构建的,并且很乐意被包含在内。如果包含模块,则不再需要命名空间。
require_relative "shared"
include CommonMethods
createLog # Call it simply
答案 1 :(得分:0)
Ruby模块必须包含在类中。请参阅the documentation for Module。
你最想要的是一堂课。
common_methods.rb:
class CommonMethods
def self.createLog()
$log = Logger.new(logPath)
puts "Doesn't seem to fire..."
$log.level=Logger::INFO
return $log
end
end
在其他文件中:
require 'common_methods'
CommonMethods.createLog
答案 2 :(得分:0)
这里的问题是你试图将createLog
称为类方法,而实际上并非如此。如果您想致电CommonMethods.createLog
,则必须通过以下方式定义createLog
类方法:
module CommonMethods
def self.createLog() # Note that it's self.createLog
$log = Logger.new(logPath)
puts "Doesn't seem to fire..."
$log.level=Logger::INFO
return $log
end
end
然后你这样称呼它:
require 'common_methods'
CommonMethods.createLog
但是,如果您想要include
类中的模块(通常用于模块的模块),则必须将createLog作为“实例方法”,然后包含模块。
module CommonMethods
def createLog()
$log = Logger.new(logPath)
puts "Doesn't seem to fire..."
$log.level=Logger::INFO
return $log
end
end
然后你就这样使用它:
require 'common_methods'
class SomeOtherClass
include CommonMethods # Include methods from CommonMethods
end
foo = SomeOtherClass.new
foo.createLog # createLog is an instance method on 'foo' now