根据Scala规范第4.6.3节:
不允许在带有重复参数的参数部分中定义任何默认参数.
实际上,如果我定义以下case类:
case class Example(value: Option[String] = None, otherValues: String*)
Run Code Online (Sandbox Code Playgroud)
我得到的结果是根据规范的预期:
error: a parameter section with a `*'-parameter is not allowed to have default arguments
case class Example(value: Option[String] = None, otherValues: String*)
Run Code Online (Sandbox Code Playgroud)
但问题是为什么不允许这样做?该类的第一个参数完全独立于重复的参数,那么为什么这个限制存在呢?
因为你可以这样做:
case class Example(value: String = "default", otherValues: String*)
Run Code Online (Sandbox Code Playgroud)
现在,如果你打电话Example("Hello", "world"),第一个"Hello"属于value或是otherValues?
你可能会争辩说你的例子中的类型是不同的,但规则变得太复杂而无法遵循.例如,经常与Any类型一起使用的重复参数.这个例子case class Example(value: Option[String] = None, otherValues: Any*)有不同的类型,但仍然遇到同样的问题
| 归档时间: |
|
| 查看次数: |
381 次 |
| 最近记录: |