如何调用另一个Ruby脚本中的方法?

时间:2013-08-21 15:33:04

标签: ruby

我有这个:

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”,然后我可以在本地使用它。我将使用许多其他方法做同样的事情,但直到我可以使方法调用正确。

有人可以帮忙吗?

3 个答案:

答案 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