【问题标题】:pass variable number of arguments in scala (2.8) case class to parent constructor将scala(2.8)案例类中可变数量的参数传递给父构造函数
【发布时间】:2010-12-12 05:35:37
【问题描述】:

我在 Scala 中为案例类试验可变构造函数参数,但无法将它们传递给案例类父级的构造函数:

abstract case class Node(val blocks: (Node => Option[Node])*)
case class Root(val elementBlocks: (Node => Option[Node])*) extends Node(elementBlocks)

上面没有编译...实际上可以这样做吗?

【问题讨论】:

标签: inheritance scala scala-2.8 variadic-functions


【解决方案1】:

这适用于 2.7:

abstract case class A(val a: String*)
case class B(val b: String*) extends A(b:_*)

应该使用 2.8。

【讨论】:

  • 其实case类继承是注定要被禁止的。
【解决方案2】:

您需要使用 :_* 语法,这意味着 “将此序列视为一个序列”!否则,您的 n 项序列将被视为 1 项的序列(这将是您的 n 项序列)。

def funcWhichTakesSeq(seq: Any*) = println(seq.length + ": " + seq)

val seq = List(1, 2, 3)
funcWhichTakesSeq(seq)      //1: Array(List(1, 2, 3)) -i.e. a Seq with one entry
funcWhichTakesSeq(seq: _*)  //3: List(1, 2, 3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-05
    • 2020-01-16
    • 2018-02-13
    • 2017-09-28
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多