scala在lambda中有一个case语句

uh_*_*boi 0 collections scala list

为什么你不能在lambda函数中有一个case语句?我的代码看起来像

def f(list:List[String]):List[Int] = list.map( _ match{ case _.length > 1 => _.length else 1})

input 
"mike" 
"tom"
"t"
" "

output
4  
3
1
1
Run Code Online (Sandbox Code Playgroud)

如你所见,我试图在lambda中做一个案例.我用语法尝试了很多方法.

Rex*_*err 8

您似乎正在尝试使用保护子句,您可能希望查看匹配语句的教程.

但是,您正在做的事情根本不需要匹配声明.

list.map(x => math.max(1, x.length))
Run Code Online (Sandbox Code Playgroud)

或者,如果max不存在并且我们不想调用x.length两次,我们可以分配一个变量:

list.map{ x =>
  val len = x.length
  if (len > 1) len else 1
}
Run Code Online (Sandbox Code Playgroud)

或者,我们可以使用match语句,使用guard子句或bare:

list.map(_.length match { case x if x > 1 => x; case _ => 1 })
list.map(_.length match { case x => if (x > 1) x else 1 })
Run Code Online (Sandbox Code Playgroud)

请注意,_不是一个变量.你不能重复使用它.换句话说,它意味着"忽略这个","使它成为一个函数","放入下一个变量".如果你想要一个可以重复引用的变量,你必须给它命名(例如x).

另请注意,else不是一个"如果没有"替代case语句.如果你想要一个默认的catch-whatever-remain语句(你应该!),请使用case _ =>.