【发布时间】:2019-01-24 23:04:46
【问题描述】:
在 Scala 2.11.7 中,具有以下案例类和一个额外的 apply 方法:
case class FieldValidator[T](key: String, isValid: T => Boolean,
errorMessage: Option[String] = None)
object FieldValidator {
def apply[T](key: String, isValid: T => Boolean,
errorMessage: String): FieldValidator[T] = ???
}
当我尝试使用时:
FieldValidator[String](key, v => !required || v.nonEmpty, "xxx")
我收到指向 v 的“缺少参数类型”编译错误。
当我明确指定v的类型时,它编译得很好,我什至可以跳过apply方法的泛型类型,即
FieldValidator(key, (v: String) => !required || v.nonEmpty, "xxx")
为什么只提供apply 的泛型类型时不推断v 的类型?
【问题讨论】:
-
@RamanMishra 我不同意提议的副本,它只是表面上相似。这个特定问题的有趣之处在于,当您删除
case class FieldValidator并只留下object FieldValidator时,它实际上会编译。用户定义的apply和合成方法之间似乎存在某种冲突。 -
是的,我同意@AndreyTyukin