这个Scala类型参数声明是什么意思? [A:B]

时间:2014-10-15 20:17:20

标签: scala types declaration traits

最近我看到了一个类似于这个定义的特征:

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]部分究竟是什么意思?

如何解释?读者,作家和结果之间有什么关系?

1 个答案:

答案 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有点奇怪。但是完全没问题。