scala中函数参数的模式匹配

时间:2016-02-03 12:16:59

标签: scala function functional-programming pattern-matching

是否可以在scala中对函数头进行模式匹配?

例如,我可以写下以下内容:

def myFunction(a:: b:: xs): Int = ???
def myFunction(a:: xs): Int = ???
def myFunction(List.empty): Int = ???

1 个答案:

答案 0 :(得分:2)

您可以在这种情况下使用部分功能。例如:

  val myFunctionCase1: PartialFunction[List[Int], Int] = {
    case a :: b :: xs => ???
  }

  val myFunctionCase2: PartialFunction[List[Int], Int] = {
    case a :: xs => ???
  }

  val myFunctionCase3: PartialFunction[List[Int], Int] = {
    case Nil => ???
  }

  // compose functions
  val myFunction: List[Int] => Int = 
              myFunctionCase1 orElse myFunctionCase2 orElse myFunctionCase3

用法示例:

myFunctionCase1(List(1,2,3))    // invoke
myFunctionCase1(List(1))        // throw MatchError
myFunctionCase2(List(1))        // invoke
...

myFunction(List(1,2,3))
myFunction(List(1))    
myFunction(Nil)
...