如何简化这种模式匹配?

Mic*_*ael 3 scala pattern-matching

假设我有这样的函数:

def foo(x: Int): Int = ???

def bar(xs: List[Int]): List[Int] = xs map {
  case x if (x > 0) => x
  case x if (foo(x) > 0) => foo(x) + 1
  case _ => 0 
}
Run Code Online (Sandbox Code Playgroud)

问题是foo被叫两次.你怎么写只打一次bar电话foo

Kev*_*ith 5

def foo(x: Int): Int = ???

def bar(xs: List[Int]): List[Int] = xs.map {
   x =>
     lazy val food = foo(x)
     if(x > 0) x
     else if (food > 0) food + 1
     else 0
}
Run Code Online (Sandbox Code Playgroud)