【问题标题】:What does this Scala type-parameter declaration mean? [A:B]这个 Scala 类型参数声明是什么意思? [甲:乙]
【发布时间】:2014-12-11 01:11:12
【问题描述】:

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

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

如何解释? Reader、Writer 和 Result 是什么关系?

【问题讨论】:

    标签: scala types declaration traits


    【解决方案1】:

    结果 - 读取和写入方法的类型参数化。可以是 T,但是 T 已经在 trait 定义中使用了,所以作者为类型参数取了一个长一点的名字。

    :Reader and :Writer - 意味着它应该在类型 Result 的范围内为 Reader 和 Writer 类型类

    更多关于上下文边界的信息可以在这里找到: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
    }
    

    然而,在 trait 定义中根本没有使用 Result 有点奇怪。但完全没问题。

    【讨论】:

    • ":Reader and :Writer - 意味着它应该在类型 Result 的范围内为 Reader 和 Writer 类型类" -- 从来没有听说过这个。此功能的名称是什么?你有我可以了解更多信息的链接吗?
    • docs.scala-lang.org/tutorials/FAQ/context-and-view-bounds.html - 什么是上下文绑定。它是在 scala 2.8.0 中引入的,我认为从 2.10 开始使用比旧式隐式更频繁
    猜你喜欢
    • 2014-09-20
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    相关资源
    最近更新 更多