最近我看到了一个类似于这个定义的特征:
trait Server[T, Reader[_], Writer[_]] {
def read[Result:Reader](t: T): Result
def write[Result:Writer](r: Result): T
}
(original definition取自"autowire" project)
[Result:Reader]
和[Result:Writer]
部分究竟是什么意思?
如何解释?读者,作家和结果之间有什么关系?
答案 0 :(得分:3)
结果 - 读取和写入方法的类型参数化。它可以是T,但T已经在特征定义中使用,因此作者为类型参数选择了更长的名称。
:Reader和:Writer - 意味着它应该是Reader和Writer在类型Result
的范围内输入类有关上下文边界的更多信息,请访问:http://docs.scala-lang.org/tutorials/FAQ/context-and-view-bounds.html
这可以用这种方式重写:
trait Server[T, Reader[_], Writer[_]] {
def read[Result](t: T)(implicit reader: Reader[Result]): Result
def write[Result](r: Result)(implicit writer: Writer[Result]): T
}
然而,在特质定义中根本没有使用Result有点奇怪。但是完全没问题。