如何编写一个方法,该方法采用在 Scala 中具有协变或逆变约束的参数?
How to write a method that takes a parameter with a covariant or contravariant bound in scala?
我正在编写一个 scala 程序,它在某些时候应该为某些任务提供一些状态更新,它也可以为任务组提供它。重点是在不同的phase
中,细节是不一样的。所以实际上 Details
特征有多种实现,我没有在这里包括。
case class GroupMessage [+S <: Details]
(
id: String,
statuses: List[StatusMessage[S]]
)
case class StatusMessage [+S <: Details]
(
id: String,
phase: Phase,
statusDetails: S
)
sealed trait Details {
def getDetails: List[String]
}
现在,问题是接收此状态更新的方法,我无法正确获取其签名。如果我只输入 def receiveStatus(status: StatusMessage)
,编译器会抱怨 StatusMessage
采用类型参数。我以为我需要 def receiveStatus[S :> Details](status: StatusMessage[S])
之类的东西,但这也不能编译。
符号 :>
不存在 - 您可能打算使用 >:
。
但这仍然无法编译,因为您希望 S
成为 Details
的子类型(例如 SpecialDetails
,而不是超类型(例如 Any
) .
def receiveStatus[S <: Details](status: StatusMessage[S])
我正在编写一个 scala 程序,它在某些时候应该为某些任务提供一些状态更新,它也可以为任务组提供它。重点是在不同的phase
中,细节是不一样的。所以实际上 Details
特征有多种实现,我没有在这里包括。
case class GroupMessage [+S <: Details]
(
id: String,
statuses: List[StatusMessage[S]]
)
case class StatusMessage [+S <: Details]
(
id: String,
phase: Phase,
statusDetails: S
)
sealed trait Details {
def getDetails: List[String]
}
现在,问题是接收此状态更新的方法,我无法正确获取其签名。如果我只输入 def receiveStatus(status: StatusMessage)
,编译器会抱怨 StatusMessage
采用类型参数。我以为我需要 def receiveStatus[S :> Details](status: StatusMessage[S])
之类的东西,但这也不能编译。
符号 :>
不存在 - 您可能打算使用 >:
。
但这仍然无法编译,因为您希望 S
成为 Details
的子类型(例如 SpecialDetails
,而不是超类型(例如 Any
) .
def receiveStatus[S <: Details](status: StatusMessage[S])