【问题标题】:Pattern matching on case classes with * (varargs) parameter带有 * (varargs) 参数的案例类的模式匹配
【发布时间】:2015-10-28 00:44:52
【问题描述】:

我有两个案例类:

case class B(value:Int)
case class A(a:String, b:B*) extends ALike

我想对 A 的一个实例进行模式匹配:

def foo(al:ALike) = {
  al match {
    case A(a, bs) => ...
  }
}

Scalac 不理解 bs 是一个 Seq[B] 并认为它只是一个 B。为什么会这样,我应该如何对其进行模式匹配?

【问题讨论】:

    标签: scala pattern-matching


    【解决方案1】:

    这是一个可变参数,因此您需要向编译器明确解释。使用以下 case 表达式:

    def foo(al:ALike) = {
      al match {
        case A(a, bs @ _*) => ...
      }
    }
    

    【讨论】:

    • 嗨,有没有办法为bs 定义类型。默认为Seq[Any]
    • 上面示例中的 @ChitralVerma bs 应该是一个序列,其内部类型与您在定义封闭案例类时为字段定义的相同。 IE。在这种情况下,它的类型应该是Seq[B]。也许您可以打开一个新问题来描述您的确切示例。
    猜你喜欢
    • 1970-01-01
    • 2013-11-28
    • 2011-07-15
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    相关资源
    最近更新 更多