scala参数只出现一次,但不能简化为下划线
在我写的一个简单的实验函数中scala参数只出现一次,但不能简化为下划线,scala,arguments,simplify,Scala,Arguments,Simplify,在我写的一个简单的实验函数中 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): Bool
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块
,则可以按如下操作
def check[T](xs: Seq[T])(pred: T => Boolean): Boolean = xs.forall {
pred(_)
}
我有点困惑为什么try-catch
块使参数显式
def check[T](xs: Seq[T])(pred: T => Boolean): Boolean = xs.forall {
try {
pred(_)
} catch {
case e: Exception => _ => false
}
}
将编译。因此,根据规范6.22,异常处理程序返回类型符合forall方法 根据下划线规则
try {
pred(_)
} catch {
case e: Exception => false
}
意味着
因此try
和catch
分支的类型不匹配。创建x=>pred(x)
lambda肯定不会抛出异常(除非内存耗尽)
try {
x => pred(x)
} catch {
case e: Exception => false
}