【发布时间】:2012-11-12 12:12:20
【问题描述】:
我创建了名为 LogActor 的 akka actor。 LogActor 的 receive 方法处理来自其他 Actor 的消息并将它们记录到指定的日志级别。
我可以通过两种方式区分不同的级别。第一个:
import LogLevel._
object LogLevel extends Enumeration {
type LogLevel = Value
val Error, Warning, Info, Debug = Value
}
case class LogMessage(level : LogLevel, msg : String)
第二个:(EDIT)
abstract class LogMessage(msg : String)
case class LogMessageError(msg : String) extends LogMessage(msg)
case class LogMessageWarning(msg : String) extends LogMessage(msg)
case class LogMessageInfo(msg : String) extends LogMessage(msg)
case class LogMessageDebug(msg : String) extends LogMessage(msg)
哪种方式更有效?匹配case类或匹配枚举值是否需要更少的时间?
(我阅读了this 问题,但没有任何关于运行时问题的答案)
【问题讨论】:
-
要记住的重要一点:在您的(可能过于简化的)第二个 sn-p 中,您没有所有
xxxLogMessage案例类共有的基类。 -
那么这样做会更好:case object LogMessage case class ErrorLogMessage(msg : String) extends LogMessage case class WarningLogMessage(msg : String) extends LogMessage case class InfoLogMessage(msg : String) extends LogMessage case类 DebugLogMessage(msg : String) 扩展 LogMessage?是否有适当的方法将“msg”写为 LogMessage 的参数(因此不必在每个案例类中都写它..)?
-
你可以这样做
abstract class LogMessage(msg:String); case class ErrorLogMessage(msg:String) extends LogMessage(msg); ...,但这不会让你免于重复msg。顺便说一句,这是正确的做法,强烈建议不要继承案例类。
标签: scala enums akka actor case-class