Scala缺少扩展功能的参数类型

阿尔斯

以下代码无法编译:

def f[T](conv: Option[String => T]) {}
f(Some(_.toInt))

<console>:13: error: missing parameter type for expanded function ((x$1) => x$1.toInt)

当然,显式类型可以解决问题:

scala> f(Some((x: String) => x.toInt))

为什么编译器无法在此处推断String类型?是否有某种歧义?

通常,是否可以从下划线扩展中手动检查和检查生成的代码?

阿列克谢·罗曼诺夫(Alexey Romanov)

基本问题(我认为)是,在键入时Some(_.toInt),编译器需要推断的type参数Some.apply[A](x: A),然后首先要对参数进行类型检查。所以_.toInt被typechecked与A作为期望的类型(被视为一个未知类型常量)。这将失败,因为仅当期望的类型是函数类型(或从Scala 2.12(单一抽象方法类型)开始)时,才允许匿名函数不指定参数类型。然后,编译器undefined以预期的类型再次尝试,但由于相同的原因而失败。

在这种情况下,预期的返回类型实际上足以确定type参数,然后允许进行typecheck _.toInt,但这并不是它设计的工作方式。

如果需要,详细资料请参见http://scala-lang.org/files/archive/spec/2.11/06-expressions.html的6.6、6.23和6.26.4段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Scala错误:扩展功能缺少参数类型

来自分类Dev

扩展功能缺少类型参数

来自分类Dev

扩展功能缺少参数类型-它取决于什么?

来自分类Dev

Scala:缺少参数类型

来自分类Dev

追踪“扩展函数缺少参数类型”

来自分类Dev

缺少 Scala df Iterator 上的参数类型

来自分类Dev

scala3扩展方法类型参数

来自分类Dev

Couchbase scala observable n1ql 查询结果缺少扩展函数的参数类型 ((x$12) => x$12.rows())

来自分类Dev

原始函数到char转换的扩展函数缺少参数类型

来自分类Dev

缺少用于 reduceLeft 的扩展函数的参数类型

来自分类Dev

类型擦除导致扩展功能的参数类型丢失

来自分类Dev

Scala中的Iterable Trait方法缺少参数类型错误。

来自分类Dev

Scala-抽象基类中的参数类型,可以扩展

来自分类Dev

scala#扩展带有类型参数的贷款模式:问题

来自分类Dev

缺少参数类型

来自分类Dev

Scala:使用PartialFunction reify调用Scala宏时,“缺少参数类型”

来自分类Dev

Scala:使用PartialFunction reify调用Scala宏时,“缺少参数类型”

来自分类Dev

扩展类型参数的特性

来自分类Dev

扩展函数参数的类型

来自分类Dev

Java反射和泛型-参数化类型信息缺少“扩展”

来自分类Dev

缺少通用类的类型参数

来自分类Dev

Android许可-缺少APK扩展功能

来自分类Dev

Android许可-缺少APK扩展功能

来自分类Dev

传播Scala类型参数

来自分类Dev

Scala子类型参数

来自分类Dev

Scala类型参数在各地

来自分类Dev

Scala - 方法类型参数

来自分类Dev

内联类,扩展类型参数

来自分类Dev

Java扩展通用类型参数