根据Scala规范Section 4.6.3:
不允许在带有重复参数的参数部分中定义任何默认参数。
事实上,如果我定义以下案例类:
case class Example(value: Option[String] = None, otherValues: String*)
我得到的结果是根据规范预期的结果:
error: a parameter section with a `*'-parameter is not allowed to have default arguments
case class Example(value: Option[String] = None, otherValues: String*)
但问题是为什么不允许这样做?该类的第一个参数完全独立于重复的参数,为什么这个限制是放置的?
答案 0 :(得分:8)
因为你可以这样做:
case class Example(value: String = "default", otherValues: String*)
现在,如果您致电Example("Hello", "world")
,第一个"Hello"
是属于value
还是otherValues
?
你可能会争辩说你的例子中的类型是不同的,但规则变得太复杂而无法遵循。例如,经常与Any
类型一起使用的重复参数。此示例case class Example(value: Option[String] = None, otherValues: Any*)
具有不同的类型,但仍然遇到同样的问题