我正在尝试实现一个“协议助手”特征,负责匹配Prompts
和Responses
. 最终的目标是拥有一个object
将各种 Prompt 和 Response 类定义为密封特征的子类,然后将一个class
混合到ProtocolSupport
该协议对象的特征中。问题是我目前的方法不会编译,即使我相当确定它应该。
这是我所拥有的精炼版本:
trait Protocol {
type Response
type Prompt <: BasePrompt
trait BasePrompt {
type Data
def validate(response: Response): Validated[Data]
}
}
trait ProtocolSupport[P <: Protocol] {
def foo(prompt: P#Prompt, response: P#Response) = {
// compiler error
prompt.validate(response)
}
}
编译器不喜欢response
作为参数prompt.validate
:
[error] found : response.type (with underlying type P#Response)
[error] required: _4.Response where val _4: P
[error] prompt.validate(response)
[error] ^
这不是很有帮助..它似乎说它想要一个P.Response
,但这正是我给它的,所以有什么问题?