Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala参数只出现一次,但不能简化为下划线_Scala_Arguments_Simplify - Fatal编程技术网

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
}