scala - func(_) 和 func _ 的区别

标签 scala language-features

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

def validations: List[ValueType => List[FieldError]] = Nil

如果我用以下方法覆盖它:
val email = new EmailField(this, 255){
  override def validations = valUnique _ :: Nil
  private def valUnique(email: String): List[FieldError] = {
    Nil
  }
}

没关系,如果我用以下方法覆盖它:
val email = new EmailField(this, 255){
  override def validations = valUnique(_) :: Nil
  private def valUnique(email: String): List[FieldError] = {
    Nil
  }
}

不行。任何人都可以解释为什么?非常感谢你。

最佳答案

如果你这样写:

override def validations: List[ValueType => List[FieldError]] = valUnique(_) :: Nil

我确定它会告诉你你得到的是 String => List[List[FieldError]] 而不是所需的类型。当使用下划线代替参数(而不是作为表达式的一部分)时,它会在直接外部作用域中扩展为函数。具体来说,
valUnique(_) :: Nil  // is translated into
x => valUnique(x) :: Nil

(valUnique(_)) :: Nil  // would be translated into
(x => valUnique(x)) :: Nil  // which would be correct

另一方面,valUnique _ 只是说“获取此方法并将其转换为函数”,因此
valUnique _ :: Nil  // gets translated into
(x => valUnique(x)) :: Nil

关于scala - func(_) 和 func _ 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5064528/

相关文章:

scala - Play for Scala 中的动态路径路由

scala - 在 Scala 的 O(sqrt(n)) 中检查数字是否为质数

javascript - 从 scala.js 调用 jquery .each 方法

java - 如何将DataFrame转换为csv文件并将其放入远程SFTP服务器?

tuples - C# 7.0 中的元组文字能否启用面向方面的编程

php - 是好是坏?为 PHP 带来 "Function Chaining"功能

json - 使用与 net.liftweb.util.JSONParser.parse 结果的模式匹配

c# - "using"构造和异常处理

c# - 为什么java和c#有终结器?

windows - 在控制台中显示希伯来语文本