在我写的一个简单的实验函数之一
def check[T](xs: Seq[T])(pred: T => Boolean): Boolean = xs.forall { x =>
try {
pred(x)
} catch {
case e: Exception => false
}
}
我只是想看看它是否可以简化为
def check[T](xs: Seq[T])(pred: T => Boolean): Boolean = xs.forall {
try {
pred(_)
} catch {
case e: Exception => false
}
}
如果没有try - catch block
,可以按照以下方式完成
def check[T](xs: Seq[T])(pred: T => Boolean): Boolean = xs.forall {
pred(_)
}
我有点困惑为什么try-catch
块使参数显式
答案 0 :(得分:1)
根据下划线的规则,
try {
pred(_)
} catch {
case e: Exception => false
}
装置
try {
x => pred(x)
} catch {
case e: Exception => false
}
因此try
和catch
分支的类型不匹配。并且创建x => pred(x)
lambda肯定不会抛出异常(除非你内存不足)。
答案 1 :(得分:0)
def check[T](xs: Seq[T])(pred: T => Boolean): Boolean = xs.forall {
try {
pred(_)
} catch {
case e: Exception => _ => false
}
}
将编译。因此,根据规范6.22,异常处理程序返回类型符合forall方法。