代码之家  ›  专栏  ›  技术社区  ›  Carbon

Scala-方法参数中的模式匹配?

  •  0
  • Carbon  · 技术社区  · 7 年前

    如何在方法的参数中分解case类?

    scala> case class f(a:Int,b:Int)
    
    defined class f
    
    scala> def z((a,b):f) = a + b
    <console>:1: error: identifier expected but '(' found.
    def z((a,b):f) = a + b
          ^
    

    这是唯一能得到我想要的吗?

    def z(r:f) = r match {case f(a,b)=>a+b}
    

    还是有更惯用的方式?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Cyrille Corpet oehmiche    7 年前

    如果您的case类如此简单,那么您可以使用@XavierGuihot在注释中建议的内容。否则,您需要模式匹配。然而,有两种方法可以使用它:要么像您所做的那样,使用 match 关键字,或使用分部函数语法:

    val z: f => Int = {
      case f(a, b) => a + b
    }
    
    推荐文章