Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何使用多个约束约束类型变量?_Scala - Fatal编程技术网

Scala 如何使用多个约束约束类型变量?

Scala 如何使用多个约束约束类型变量?,scala,Scala,我有以下几种: object Messenger { sealed trait MessageOrigin case object SAP extends MessageOrigin case object KAFKA extends MessageOrigin final case class Message(topic: String, event: String, data: String, origin: Me

我有以下几种:

object Messenger {

  sealed trait MessageOrigin

  case object SAP extends MessageOrigin

  case object KAFKA extends MessageOrigin

  final case class Message(topic: String, event: String,
                           data: String, origin: MessageOrigin,
                           proceed: Long = java.time.Instant.now().toEpochMilli) 

  sealed trait MessageCmd

  case class SaveMessage(value: Message) extends MessageCmd

  sealed trait MessageEvent

  case class MessageSaved(value: Message) extends MessageEvent

  final case class MessageState(value: Message = Message("", "", "", SAP))

}



object Logger {

  sealed trait Level

  final case object Error extends Level

  final case object Warning extends Level

  final case object Info extends Level

  final case class Log(level: Level, msg: String)

  sealed trait LogCmd

  final case class SaveLog(value: Log) extends LogCmd

  sealed trait LogEvent

  final case class LogSaved(value: Log) extends LogEvent

  final case class LogState(value: Log = Log(Info, "Initial"))


}
我想做的是,将以下case类的以下类型变量
A
约束为:

 final case class TrashTalk[A : LogCmd, MessageCmd](value: A)
但编译器抱怨:

scala> final case class TrashTalk[A : LogCmd, MessageCmd](value: A)
<console>:19: error: LogCmd does not take type parameters
       final case class TrashTalk[A : LogCmd, MessageCmd](value: A)
scala>final case类垃圾话[A:LogCmd,MessageCmd](值:A)
:19:错误:LogCmd不接受类型参数
最后一个案例类垃圾话[A:LogCmd,MessageCmd](值:A)

我做错了什么?

首先,
LogCmd
MessageCmd
不是类型类,所以
语法即使只指定一个类型也不起作用

final case class TrashTalk[A : LogCmd](value: A) // Error
应该是

final case class TrashTalk[A <: LogCmd](value: A)// OK

首先,
LogCmd
MessageCmd
不是类型类,因此即使只指定一个类型,
语法也不起作用

final case class TrashTalk[A : LogCmd](value: A) // Error
应该是

final case class TrashTalk[A <: LogCmd](value: A)// OK

您试图将您的类型限制为什么<代码>保存消息?扩展
MessageCmd
?类型
A
应为
LogCmd
MessageCmd
。您试图将类型限制为什么<代码>保存消息?扩展
MessageCmd
?类型
A
应为
LogCmd
MessageCmd