Scala 在dotty中如何使用通配符?

Scala 在dotty中如何使用通配符?,scala,dotty,scala-3,Scala,Dotty,Scala 3,下面是一个示例,它允许迭代case类的字段,并可能演示了Scala中通配符(\uu)的多种用法之一,但不在Dotty中编译: case class ListTest( listString: List[String], listInt: List[Int] ) { def map[_,O](ff: List[_] => O): Iterable[O] = { getClass.getDeclaredFields.ma

下面是一个示例,它允许迭代case类的字段,并可能演示了Scala中通配符(
\uu
)的多种用法之一,但不在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)

似乎它们的用途仍然存在,但目前是否有办法做到这一点(例如,circa dotty 0.6)?

您的代码示例包含多个
\u
用法,唯一有问题的是:

定义映射[uo]
在Scala 2中,这声明了两个类型参数,一个名为
\uu
,另一个名为
O
。名为
\u
的参数无效,因为您无法引用它(因为
\u
已具有不同的含义)。我认为这是Scala 2解析器中的一个bug而不是一个特性。您只需删除此类型参数,代码应编译:

def映射[O]

您的代码示例包含
的多种用法,唯一有问题的是:

定义映射[uo]
在Scala 2中,这声明了两个类型参数,一个名为
\uu
,另一个名为
O
。名为
\u
的参数无效,因为您无法引用它(因为
\u
已具有不同的含义)。我认为这是Scala 2解析器中的一个bug而不是一个特性。您只需删除此类型参数,代码应编译:

def映射[O]