你如何在 dotty 中使用通配符?
How do you use wildcards in dotty?
这里是一个允许迭代案例 class 字段的示例,并可能演示了通配符 (_
) 在 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)
似乎它们的用途可能仍然是 up in the air,但目前有没有办法做到这一点(例如大约 dotty 0.6)?
您的代码示例包含 _
的多种用法,唯一有问题的是:
def map[_,O]
在 Scala 2 中,这声明了两个类型参数,一个名为 _
,另一个名为 O
。名为 _
的参数没有用,因为您无法引用它(因为 _
已经具有不同的含义)。我认为这是 Scala 2 解析器中的错误,而不是功能。您可以只删除此类型参数,您的代码应该可以编译:
def map[O]
这里是一个允许迭代案例 class 字段的示例,并可能演示了通配符 (_
) 在 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)
似乎它们的用途可能仍然是 up in the air,但目前有没有办法做到这一点(例如大约 dotty 0.6)?
您的代码示例包含 _
的多种用法,唯一有问题的是:
def map[_,O]
在 Scala 2 中,这声明了两个类型参数,一个名为 _
,另一个名为 O
。名为 _
的参数没有用,因为您无法引用它(因为 _
已经具有不同的含义)。我认为这是 Scala 2 解析器中的错误,而不是功能。您可以只删除此类型参数,您的代码应该可以编译:
def map[O]