0

这是一个允许迭代案例类字段的示例,并可能演示_了 Scala 中通配符 ( ) 的多种用法之一,但在 Dotty 中不编译:

    case class ListTest(
       listString: List[String],
       listInt: List[Int]
     ) {
      def map[_,O](ff: List[_] => O): Iterable[O] = {
        getClass.getDeclaredFields.map { field =>
          field.get(this) match {
            case list: List[_] => Some(ff(list))
            case _ => None
          }
        }.flatMap(x => x)
      }
    }
  }



val lists = ListTest(List("asdf", "1234"), List(1,2,3))
lists.map(l => l.size)

似乎它们的使用可能仍然悬而未决,但目前有没有办法做到这一点(例如大约 dotty 0.6)?

4

1 回答 1

4

您的代码示例包含 的多种用法_,唯一有问题的是: def map[_,O] 在 Scala 2 中,这声明了两个类型参数,一个名为_,另一个名为O。命名的参数_是无用的,因为你不能引用它(因为_已经有不同的含义)。我认为这是 Scala 2 解析器中的错误,而不是功能。您可以删除此类型参数,您的代码应该可以编译: def map[O]

于 2018-03-31T18:30:22.667 回答