gpt4 book ai didi

scala - 推断 lambda 的参数类型(再次!)

转载 作者:行者123 更新时间:2023-12-04 02:22:06 32 4
gpt4 key购买 nike

我想知道为什么这不起作用(缺少参数类型)?

 Seq(1,2,3).toSet.map(_ + 1)

但这确实:
 val foo = Seq(1,2,3).toSet
foo.map(_ + 1)

以及这个:(3)
  Seq(1,2,3).toSet[Int].map(_ + 1)

或这个:
  Seq(1,2,3).toList.map(_ + 1)

有什么特别 toSet这使它在第一种情况下松散类型,但在第二种情况下不会?

最佳答案

有根据的猜测:

def toSet[B :> A]: Set[B]

对比
def toList: List[A]

出于某种原因 toSet是参数化的 - 如果你拆分 toSetmap分成两个语句,然后在第一种情况下,编译器必须假设某些内容并将该类型分配给 val ,然后使用 B猜测是 Amap .

但与 Seq(1,2,3).toSet.map它猜测有一些 B >: Int然后它应该映射到......究竟是什么?你可以猜出 _ * 2的类型仅当您知道 _ 的类型时.

长话短说 [B :> A]似乎是问题,因为如果我们这样做:
implicit class AsSetOps[F, A](val fa: scala.collection.SeqLike[A, F]) {
def asSet: Set[A] = fa.toSet[A]
}
Seq(1,2,3).asSet.map(_ * 2)

有用。

我只能猜测这是一些尝试 toSet协变适得其反。

关于scala - 推断 lambda 的参数类型(再次!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55955232/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com