gpt4 book ai didi

Scala 提取器 - 跳过未使用的参数

转载 作者:行者123 更新时间:2023-12-04 01:14:23 28 4
gpt4 key购买 nike

给出以下代码:

abstract class MyTuple

...

case class MySeptet(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int, g: Int) extends MyTuple

case class MyOctet(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int, g: Int, h: Int) extends MyTuple

...

使用生成的提取器时,是否可以跳过剩余的参数,假设它们未使用?

例如我不想在下面的代码片段中写很多下划线:
case MyOctet(a, b, _, _, _, _, _, _) => ... // uses only a and b

最佳答案

为实际上依赖于 Array 的元组类提供提取器的简单方法提取器,因此绕过了原始问题。


abstract class MyTuple (order: Int)
case class MySeptet(coord: Array[Int]) extends MyTuple(7)
case class MyOctet(coord: Array[Int]) extends MyTuple(8)

所以对于
val o = MyOctet( (1 to 8).toArray )

我们可以像这样提取八位字节中的前两个元素,
o match {
case MyOctet( Array(a,b,_*) ) => a+b
case _ => 0
}
res: Int = 3

请注意,这并没有解决跳过上面定义的案例类中剩余参数的问题。

还要注意这种方法的一个弱点,如下所示,
scala> val Array(a,b) = Array(1)
scala.MatchError: [I@16a75c0 (of class [I)

关于Scala 提取器 - 跳过未使用的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24099086/

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