为什么你不能在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
正如你所看到的,我正在尝试在lambda中做一个案例。我用语法尝试了很多方法。
答案 0 :(得分:8)
您似乎正在尝试使用保护条款,您可能希望查看a tutorial on match statements。
但是,您正在做的事情根本不需要匹配声明。
list.map(x => math.max(1, x.length))
或者,如果max
不存在且我们不想两次致电x.length
,我们可以指定一个变量:
list.map{ x =>
val len = x.length
if (len > 1) len else 1
}
或者,我们可以使用匹配语句,使用保护子句或裸:
list.map(_.length match { case x if x > 1 => x; case _ => 1 })
list.map(_.length match { case x => if (x > 1) x else 1 })
请注意,_
不是变量。你不能重复使用它。换句话说,它意味着忽略这个","使它成为一个功能","放入下一个变量是"。如果您想要一个可以重复引用的变量,您必须为其命名(例如x
)。
另请注意,else
不"如果不是"替代case
语句。如果你想要一个默认的catch-whatever-remain语句(你应该!),请使用case _ =>
。