为什么Scala部分中不允许使用重复参数的默认参数?

时间:2015-11-19 16:58:46

标签: scala

根据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*)

但问题是为什么不允许这样做?该类的第一个参数完全独立于重复的参数,为什么这个限制是放置的?

1 个答案:

答案 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*)具有不同的类型,但仍然遇到同样的问题