gpt4 book ai didi

Scala self 意识特征

转载 作者:行者123 更新时间:2023-12-04 19:50:36 24 4
gpt4 key购买 nike

我制作了一个 Logging trait,它封装了日志实现的细节,它也很好而且懒惰,因此非常高效,尤其是当特定的日志级别不活跃时。

/**
* A SLF4J based logging trait
*/
trait Log {
import org.slf4j.Logger
import org.slf4j.LoggerFactory

val loggedClazz: Class[_]

lazy val logger: Logger = LoggerFactory.getLogger(loggedClazz.getClass)

def logDebug(codeblock: => String) = {
if (logger.isDebugEnabled) {
logger.debug(codeblock)
}
}

def logError(codeblock: => String) = {
if (logger.isErrorEnabled) {
logger.error(codeblock)
}
}

def logInfo(codeblock: => String) = {
if (logger.isInfoEnabled) {
logger.info(codeblock)
}
}

def logWarn(codeblock: => String) = {
if (logger.isWarnEnabled) {
logger.warn(codeblock)
}
}
}

但是,它需要混入此特征的类才能实现以下内容..

object MyServer extends Log {
val loggedClazz = MyServer.getClass
}

我的问题是,是否有可能以某种方式使 Trait 知道它被混入了哪个类?删除需要做的事情:

   val loggedClazz = MyServer.getClass

解决方案:根据提供的反馈,我按以下方式重写了类(class)。

/**
* A SLF4J based logging trait
*/
trait Log {
import org.slf4j.Logger
import org.slf4j.LoggerFactory

lazy val logger: Logger = LoggerFactory.getLogger(getClass)

def logDebug(codeblock: => String) = {
if (logger.isDebugEnabled) {
logger.debug(codeblock)
}
}

def logError(codeblock: => String) = {
if (logger.isErrorEnabled) {
logger.error(codeblock)
}
}

def logInfo(codeblock: => String) = {
if (logger.isInfoEnabled) {
logger.info(codeblock)
}
}

def logWarn(codeblock: => String) = {
if (logger.isWarnEnabled) {
logger.warn(codeblock)
}
}
}

非常简单。当你第一次做对时;)

最佳答案

您可以将 val loggedClazz: Class[_] 替换为 val loggedClazz = getClass

关于Scala self 意识特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5869673/

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