我如何匹配多个参数?

Phi*_*l H 33 scala pattern-matching

我有一个功能:

def func(a: int, b: int, c: double): int
Run Code Online (Sandbox Code Playgroud)

我想要匹配各种可能的场景

  1. 无论在哪里c0,返回b-a
  2. c> 9,返回0
  3. 无论何处a=b返回0

依此类推,在做一些更复杂的逻辑之前,如果没有满足上述要求.

我必须先单独匹配c,还是可以匹配a,b,c,比如_,_,0

ten*_*shi 66

您可以模式匹配所有描述的情况,如下所示:

def func(a: Int, b: Int, c: Double) = (a, b, c) match {
    case (a, b, 0) => b - a
    case (a, b, c) if c > 9 || a == b => 0
    case _ => 1 // add your logic here
}
Run Code Online (Sandbox Code Playgroud)

  • 这确实回答了提出的问题,但为什么要在这里使用patten匹配?好像旧的if语句似乎很好.. (2认同)
  • 我并不认为模式匹配在任何地方都没有价值.我认为这里没有帮助使事情变得更清楚 - 主要是因为任何条件使用的所有值都需要在匹配的表达式中(并且Lisp的COND不是模式匹配,它只是在另一个包装器中的其他地方.在这里我会声称if/else if/else if/else是否更清楚 - 更像是COND) (2认同)

The*_*aul 5

从我对 Easy Angel 的回答的评论来看,我仍然有这样的感觉

if (c == 0)
   b -a
else if (c > 9)
   0
else if (a == b)
   0
else 
   1 // your logic here
Run Code Online (Sandbox Code Playgroud)

更清楚了。基本上是因为这里实际上没有任何模式可以匹配。