gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:40:48 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com