mar*_*omo 15 oop coding-style r
我是CRAN 上的日志包的作者,我不认为自己是R程序员,所以我试图尽可能地使它与Python标准日志包代码兼容,但现在我有一个问题.我希望它能让我有机会学习更多的R!
它是关于分层记录器的.在Python中我会创建一个记录器并发送它记录记录:
l = logging.getLogger("some.lower.name")
l.debug("test")
l.info("some")
l.warn("say no")
Run Code Online (Sandbox Code Playgroud)
在我的R包中,您不创建向其发送消息的记录器,您可以调用一个函数,其中一个参数是记录器的名称.就像是
logdebug("test", logger="some.lower.name")
loginfo("some", logger="some.lower.name")
logwarn("say no", logger="some.lower.name")
Run Code Online (Sandbox Code Playgroud)
问题是每次要向其发送日志消息时都必须重复记录器的名称.我在想,我可能会创建一个部分应用的函数对象并调用它,例如
logdebug <- curry(logging::logdebug, logger="some.lower.logger")
Run Code Online (Sandbox Code Playgroud)
但是我需要为所有调试功能这样做......
您的R用户将如何处理此问题?
Mar*_*gan 27
听起来像参考课的工作?setRefClass,?ReferenceClasses
Logger <- setRefClass("Logger",
fields=list(name = "character"),
methods=list(
log = function(level, ...)
{ levellog(level, ..., logger=name) },
debug = function(...) { log("DEBUG", ...) },
info = function(...) { log("INFO", ...) },
warn = function(...) { log("WARN", ...) },
error = function(...) { log("ERROR", ...) }
))
Run Code Online (Sandbox Code Playgroud)
然后
> basicConfig()
> l <- Logger$new(name="hierarchic.logger.name")
> l$debug("oops")
> l$info("oops")
2011-02-11 11:54:05 NumericLevel(INFO):hierarchic.logger.name:oops
> l$warn("oops")
2011-02-11 11:54:11 NumericLevel(WARN):hierarchic.logger.name:oops
>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2392 次 |
| 最近记录: |