使用默认参数值定义类时,为什么需要显式提供默认参数的类型?
例如:
scala> case class Person(name:String = "SomeOne")
defined class Person
但是在未明确提供类型时遇到以下错误:
scala> case class Person(name = "SomeOne")
<console>:1: error: ':' expected but '=' found.
case class Person(name = "SomeOne")
有没有理由为什么类型推断系统无法识别默认参数值的类型?
答案 0 :(得分:3)
在Scala中,以下所有声明均有效
case class AnyPerson(name: Any = "SomeOne")
case class StringPerson(name: String = "SomeOne")
case class CharSequencePerson(name: CharSequence = "SomeOne")
即便是这个也是有效的
implicit def stringToLenght(name: String) = name.length()
case class Person(name:Int = "SomeOne")
在这种情况下,名称默认值为7。
所以可能的选项数量是:
的总和让我们在你的代码中错误地说你正在做这样的事情:
val person = AnyPerson()
val anotherPerson = AnyPerson(name = person.name + 9)
在这种情况下。你是否犯了一个错误,或者你给了编译器一个暗示,名称的真正含义是什么?
语言可以让编译器对开发人员的含义进行假设。但这会使代码更难以阅读,理解,这对最终用户来说非常容易出错。