谁能告诉我 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/