首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不能将case类的构造函数用作map()内部的函数

为什么不能将case类的构造函数用作map()内部的函数
EN

Stack Overflow用户
提问于 2020-07-22 12:31:01
回答 2查看 85关注 0票数 2

编译器不接受将元组直接传递给构造函数,如最小示例所示:

代码语言:javascript
复制
scala> case class A(a:Int, b:Int)
defined class A

scala> List((1, 2)).map(A)
<console>:14: error: type mismatch;
found   : A.type
required: ((Int, Int)) => ?
    List((1, 2)).map(A)
                        ^

scala> List((1, 2)).map(A _)
<console>:14: error: _ must follow method; cannot follow A.type
    List((1, 2)).map(A _)
                        ^

Scala解析器组合子的运算符是^^。在fastparse库中有类似的东西吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-22 12:37:01

你在找.tupled

代码语言:javascript
复制
List((1, 2)).map(A.tupled)

这不能“开箱即用”的原因是因为A需要两个Int类型的参数,而不是(Int, Int)的元组。tupled(A, A)提升到((A, A))中。

可以通过修改A的构造函数来验证这一点:

代码语言:javascript
复制
final case class A(tup: (Int, Int))

然后这个就行了:

代码语言:javascript
复制
List((1, 2)).map(A)
票数 6
EN

Stack Overflow用户

发布于 2020-07-22 12:37:14

这是因为以下原因:

代码语言:javascript
复制
List((1, 2)).map(A)

翻译为:

代码语言:javascript
复制
List((1, 2)).map(x => A(x))

但是A构造函数接受两个整数作为参数,而不是Tuple2[Int, Int]。您必须定义一个接受两个整数的元组的构造函数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63026912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档