scala - 为什么Scala不能绑定(bind)通配符类型参数?

标签 scala wildcard type-parameter

我有一个类型化的pair类:

class TypedPair[T]

我想将某个函数应用于它们的异构序列:

def process[T](entry: TypedPair[T]) = {/* something */}

为什么这不起作用?

def apply(entries: TypedPair[_]*) = entries.foreach(process)

失败并出现错误:

error: polymorphic expression cannot be instantiated to expected type;
 found   : [T](TypedPair[T]) => Unit
 required: (TypedPair[_]) => ?
         def apply(entries: TypedPair[_]*) = entries.foreach(process)

我不记得在 Java 中遇到过这个问题...

最佳答案

在这种情况下,编译器在识别匿名方法时遇到问题。当您添加虚拟参数时,您还更改了语法以帮助编译器使用它,因此以下内容将起作用:

def apply(entries: TypedPair[_]*) = entries.foreach(process(_))

关于scala - 为什么Scala不能绑定(bind)通配符类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4302656/

相关文章:

scala - 迭代案例类数据成员

scala - 如何使用 sbt-native-packager 在 Docker 中使二进制文件可执行?

javascript - 使用通配符的 jQuery 高级选择器

Django 错误(外部 IP): Invalid HTTP_HOST header: '*.domain.com'

hyperlink - 如何在 Sitecore 中使用带有通配符项的内部链接?

java - 无法编译实现没有类型参数的接口(interface)的类

json - 如何在spark scala中将json字符串解析到不同的列?

scala - 在不修改所有接收方法的情况下记录 Akka 中的所有消息

c# - 在 C# 中表达类型关系并避免长类型参数列表

java - Scala:使用类型参数信息访问静态 Java 方法