gpt4 book ai didi

scala - 函数参数的模式匹配

转载 作者:行者123 更新时间:2023-12-04 17:52:32 24 4
gpt4 key购买 nike

我有一个元组向量

val l = for {i <- 1 to 5} yield (i,i*2)
Vector((1,2), (2,4), (3,6), (4,8), (5,10))

我想总结一下:

l.reduce((x,y) => (x._1+y._1, x._2+y._2))
(15,30)

但使用模式匹配。

如果函数只有一个参数,我知道该怎么做,即:l.map({case(a,b)=>a+b}),但我不能让它与两个参数一起工作。这就是我试图做的:

l.reduce({(case(a,b),case(c,d))=>(a+c,b+d)})

但这行不通。

所以我的问题是,如何解压缩作为函数参数的 2 个元组?

最佳答案

只需明确指定类型以帮助偏函数机制:

l.reduce[(Int, Int)]{ case ((a,b), (c, d)) => (a + b, c + d)}

没有 [(Int, Int)] scala 无法为您的部分函数推断正确的类型

附:如果您很感兴趣,为什么您会看到有关 String 的此错误,而不管您实际使用的是什么类型(在您的情况下是 Int):

found   : Any , 
required: String

这是因为 Predef 中字符串的隐含“+”。这不是这个隐式的唯一问题 - 你可以看看 SI-194 .

即使没有:

l.reduce{ case ((a,b), (c, d)) => (a, d)}

The argument types of an anonymous function must be fully known. (SLS 8.5)
Expected type was: (?, ?) => ?

scala 无法推断类型,因为它无法推断偏函数的类型 - 可能是 Int 的任何父类(super class)型:(A1, A1) => A1 预期,其中 [A1>:A]

关于scala - 函数参数的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26240898/

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