2009-11-05 66 views
4

什么是最好的(正确)的方式来分享其中包括许多Ruby类记录器实例?分享模块/类间的全球记录

现在我刚刚创建的记录器作为全球$记录= Logger.new变量,但我有一种感觉,有一种更好的方式来做到这一点,而不使用全局变量。

如果我有以下几点:

module Foo 
    class A 
    class B 
    class C 
    ... 
    class Z 
end 

什么是分享的所有类中的日志记录器实例的最佳方法?我是否以某种方式在Foo模块中声明/创建记录器,还是仅使用全局$ logger罚款?

回答

9

添加一个常数模块:

module Foo 
    Logger = Logger.new 
    class A 
    class B 
    class C 
    ... 
    class Z 
end 

然后,你可以做你的类Logger.log('blah')。由于我们的阴影,全球不断LoggerFoo::Logger,这意味着,如果你想指LoggerFoo模块中,你必须使用范围解析:::Logger

+0

拿到“未定义局部变量或方法'记录”的。”你的代码.. – skywinder 2015-06-10 08:31:31

0

您可以创建一个单独记录仪为您的应用程序,所以每一个参考值将是同一个对象。

require 'singleton' 

class Logger 
    include Singleton 
end 

l = Logger.instance 
k = Logger.instance 

puts k.object_id == l.object_id #returns true 
+4

请仔细阅读[‘电锯杀婴记录仪Manuever’(http://groups.google.com/group/ comp.lang.ruby/browse_frm /线程/ aaec68ab9088e3ef/d0f054886e0bf71c?LNK = GST&q =电锯#d0f054886e0bf71c)[原文如此]转向记录器到一个单为大家之前。子类,或者(正如Pesto在另一个答案中所建议的那样)创建一个指向您喜欢的实例的常量。 – Phrogz 2010-11-22 16:45:02