gpt4 book ai didi

ruby - 使用 Ruby 中的简单包装类增加 DRYness

转载 作者:数据小太阳 更新时间:2023-10-29 08:38:02 25 4
gpt4 key购买 nike

必须有更好的方法来做到这一点:

require 'log4r'

class PaddedLogger

attr_accessor :logger, :padding

def initialize(args)
@logger = Log4r::Logger.new args[:name]
@padding = args[:padding]
end

def debug(system, message)
system = "[#{system}]"
@logger.debug "#{system.ljust(@padding)}#{message}"
end

def info(system, message)
system = "[#{system}]"
@logger.info "#{system.ljust(@padding)}#{message}"
end

def warn(system, message)
system = "[#{system}]"
@logger.warn "#{system.ljust(@padding)}#{message}"
end

def error(system, message)
system = "[#{system}]"
@logger.error "#{system.ljust(@padding + 3)}#{message}"
end

def fatal(system, message)
system = "[#{system}]"
@logger.fatal "#{system.ljust(@padding + 3)}#{message}"
end
end

它只是一个包装类,可以帮助我让我的 log4r 日志以特定格式出现,它也完全按照我的需要工作,但 Ruby 的元编程魔法肯定可以简化这个,所以我不必不断重复我自己。

最佳答案

也许是这样的?

require 'log4r'

class PaddedLogger

attr_accessor :logger, :padding

def initialize(args)
@logger = Log4r::Logger.new args[:name]
@padding = args[:padding]
end

[:debug, :info, :warn, :error, :fatal].each do |reason|
define_method reason do |system, message|
system = "[#{system}]"
@logger.send reason, "#{system.ljust(@padding)}#{message}"
end
end

end

当你这样做的时候,为什么不将 define_method block 中的两行折叠为一行?

@logger.send reason, "[#{system}]".ljust(@padding) + message

关于ruby - 使用 Ruby 中的简单包装类增加 DRYness,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22878440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com