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中做一个案例.我用语法尝试了很多方法.
您似乎正在尝试使用保护子句,您可能希望查看匹配语句的教程.
但是,您正在做的事情根本不需要匹配声明.
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 _ =>.
| 归档时间: |
|
| 查看次数: |
686 次 |
| 最近记录: |