2
为什么这个代码产生一个错误斯卡拉 - 推断类型参数
def test[A](a: List[A], f: A => A) = a.map(f)
println(test(List(1,2,3), _*2))
error: missing parameter type for expanded function ((x$2) => x$2.$times(2))
不应斯卡拉能够告诉A是诠释?
为什么这个代码产生一个错误斯卡拉 - 推断类型参数
def test[A](a: List[A], f: A => A) = a.map(f)
println(test(List(1,2,3), _*2))
error: missing parameter type for expanded function ((x$2) => x$2.$times(2))
不应斯卡拉能够告诉A是诠释?
您需要第二个参数列表才能正常工作。我不确定这是如何在规范中定义的,但是我之前已经看到了这一点。
scala> def test[A](a: List[A])(f: A => A) = a.map(f)
test: [A](a: List[A])(f: (A) => A)List[A]
scala> test(List(1))(_+1)
res1: List[Int] = List(2)
这是一个例子,说明如何在不改变任何东西的情况下使其工作。
scala> println(test(List(1,2,3), (i: Int) => i * 2))
斯卡拉的类型推断是有限的,有时你应该帮助!
这是文章Making the most of Scala's (extremely limited) type inference
谢谢。这是完美的。 – SpiderPig
通用类型参数的类型推断严格地从左到右,仅从参数列表到参数列表。参数列表中没有统一,也没有向后传播。这是在规范中定义的,尽管我太累了,不能查看其中的位置。 –