func(_)和func _之间的区别

Fil*_*uca 4 language-features scala

有谁能告诉我Scala中func _和func(_)之间的区别?我不得不重写这个方法:

def validations: List[ValueType => List[FieldError]] = Nil
Run Code Online (Sandbox Code Playgroud)

如果我用以下方式覆盖它:

val email = new EmailField(this, 255){
  override def validations = valUnique _ :: Nil
  private def valUnique(email: String): List[FieldError] = {
    Nil
  }
}
Run Code Online (Sandbox Code Playgroud)

没关系,如果我用以下方式覆盖它:

val email = new EmailField(this, 255){
  override def validations = valUnique(_) :: Nil
  private def valUnique(email: String): List[FieldError] = {
    Nil
  }
}
Run Code Online (Sandbox Code Playgroud)

不行.任何人都可以解释原因吗?非常感谢你.

Kev*_*ght 8

如果是:

valUnique _
Run Code Online (Sandbox Code Playgroud)

您正在部分应用valUnique方法,使其作为函数加框.

另一方面:

valUnique(_)
Run Code Online (Sandbox Code Playgroud)

指定对valUnique方法的调用的占位符,通常这样做是为了将匿名函数传递给其他高阶函数,如:

emails flatMap { valUnique(_) }
Run Code Online (Sandbox Code Playgroud)

在您的情况下,虽然部分应用程序仍然完全有效,但在范围内没有任何内容可用于实现此类占位符.

请注意,在将方法作为参数传递之前,您还可以将方法提升为函数:

emails flatMap { valUnique _ }
Run Code Online (Sandbox Code Playgroud)

这种相似性几乎可以肯定你的困惑的原因,尽管这两种形式都没有做相当幕后同样的事情.