gpt4 book ai didi

oop - R 中的哪种 OO 编程风格将导致 Python 程序员可读?

转载 作者:行者123 更新时间:2023-12-03 15:20:59 24 4
gpt4 key购买 nike

我是 logging package 的作者在 CRAN 上,我不认为自己是 R 程序员,所以我试图让它与 Python standard logging package 的代码兼容。尽我所能,但现在我有一个问题。我希望它能让我有机会学习更多 R!

这是关于分层记录器。在 Python 中,我会创建一个记录器并向它发送日志记录:

l = logging.getLogger("some.lower.name")
l.debug("test")
l.info("some")
l.warn("say no")

相反,在我的 R 包中,您没有创建一个记录器来发送消息,而是调用一个函数,其中一个参数是记录器的名称。就像是
logdebug("test", logger="some.lower.name")
loginfo("some", logger="some.lower.name")
logwarn("say no", logger="some.lower.name")

问题是每次要向记录器发送日志消息时都必须重复记录器的名称。我在想,我可能会创建一个部分应用的函数对象并调用它,比如
logdebug <- curry(logging::logdebug, logger="some.lower.logger")

但是然后我需要为所有调试功能这样做......

你的 R 用户会如何处理这个问题?

最佳答案

听起来像是引用类的工作 ?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", ...) }
))

进而
> 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
>

关于oop - R 中的哪种 OO 编程风格将导致 Python 程序员可读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4959018/

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