gpt4 book ai didi

函数类型的 Scala 类型推断

转载 作者:行者123 更新时间:2023-12-04 17:53:49 25 4
gpt4 key购买 nike

考虑下面的代码:(需要解决的实际代码见下文)

def applyAll[T,S, U <: Seq[T => S]](l : U, x: T) = l.map(f => f(x))
val u = List((i: Int) => i + 1, (i: Int) => i + 2)
println(applyAll(u,1))

(给定 T => SSeq 和一个值,我们希望得到应用于该值的函数)。

尽管 applyAll 编译正常,但在 u 上调用它会出现以下错误:

Error:(35, 13) inferred type arguments [Int,Nothing,List[Int => Int]] do not conform to method applyAll's type parameter bounds [T,S,U <: Seq[T => S]]
println(applyAll(u,1))
^

这表明编译器无法推断类型参数 S,我猜这是因为它“嵌套”在函数类型 T => S 中>.


编辑:

我尝试修复的实际代码类似(尽管很复杂),并且不能通过删除 U 参数来修复。开始了:

def applyNatural[T, S, Repr <: TraversableLike[T => S, Repr], That]
(data: T, jobs: Repr)
(implicit bf: CanBuildFrom[Repr, S, That]): That = {
jobs.map(f => f(data))
}
val u = List((i: Int) => i + 1, (i: Int) => i + 2)
val v = applyNatural(1, u)
println(v)

最佳答案

U 根本没用。随便写

  def applyAll[T,S](l :  Seq[T => S], x: T) = l.map(f => f(x))
val u = List((i: Int) => i + 1, (i: Int) => i + 2)
println(applyAll(u,1))

关于函数类型的 Scala 类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35770386/

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