oly*_*lyk 2 lambda scala parser-combinators case-class fastparse
编译器不接受将元组直接传递给构造函数,如最小示例所示:
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 _)
^
Run Code Online (Sandbox Code Playgroud)
Scala 解析器组合器具有^^用于此的运算符。fastparse 库中有类似的东西吗?
您正在寻找 .tupled
List((1, 2)).map(A.tupled)
Run Code Online (Sandbox Code Playgroud)
这不能“开箱即用”的原因是因为A需要两个 type 参数Int,而不是(Int, Int). tupled升降机(A, A)成((A, A))。
您可以通过修改A的构造函数来验证这一点:
final case class A(tup: (Int, Int))
Run Code Online (Sandbox Code Playgroud)
然后这有效:
List((1, 2)).map(A)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |