【发布时间】:2015-01-19 02:50:30
【问题描述】:
我有一个 Log 类,它在默认记录器中加载并添加了一些方法,这样我就可以获得一些语法糖;问题是 Logger 从另一个类获取文件位置和名称 log.progname,该类充当称为 Info(配置选项、常量等)的所有信息的中心位置。
这是一个问题,因为我想让 Log 类可重用。如何在不改变行为的情况下将 Log 类与 Info 类分离。
我的班级目前看起来像:
class Log
F = File.open(Info[:logfile], 'a')
F.sync = true
@l = Logger.new(F).tap do |log|
log.progname = Info[:short_name]
end
class << self
def set_level(level)
@l.level = Logger.const_get level.upcase
end
def display(message, level)
puts message unless level == :fatal
end
def []=(level,message)
case message.class.to_s
when 'String'
display message, level
@l.send level, message
when 'Array'
message.each do |line|
display line, level
@l.send level, line
end
when 'Hash'
message.each do |level,line|
display line, level
@l.send level, line
end
else
raise TypeError, "method expects Hash,String or Array, message was of type #{message.class}"
end
end
end
end
我能想到的唯一方法是将它从单例转换为实例对象,然后在初始化时将值传递给它, 但我宁愿将其保留为单例,请问有什么建议吗?
我想我真正想要的是关于如何将这个类与另一个类分离的建议,更重要的是如何在未来做到这一点。
【问题讨论】:
标签: ruby