6
據斯卡拉規格Section 4.6.3:爲什麼默認參數不允許在帶重複參數的Scala部分?
不允許在重複參數的參數部分定義任何默認參數。
事實上,如果我定義了以下案例類:
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*)
但問題是,爲什麼是這樣的不允許?這個類的第一個論點完全獨立於重複的論證,爲什麼這個限制是地方?
正確,總是有意義的。閱讀答案後,似乎很明顯,我覺得有點愚蠢,因爲我不知道自己:) – djsecilla
這種歧義只是一個模棱兩可,如果你想它。例如,您的示例在Ruby中工作得很好,而Ruby甚至沒有類型指導的優勢。 Ruby甚至允許在(位置)參數列表的開始和結束時強制性的位置參數。基本上,開始時強制性的位置參數首先從左到右進行綁定,然後在從右到左的端點處強制性的位置參數,然後從左到右可選的位置參數,然後是其餘的位置參數。 –
所有這些後面跟着強制關鍵字參數,可選關鍵字參數和最後關鍵字參數。所以,其原因不一定是「它不可能變得毫不含糊」,而是「使它明確不符合其他語言的簡單性」。因此,如果遵循Ruby規則,並且沒有歧義,''Hello''綁定到'value'並且'Seq(「world」)'綁定到'otherValues'。 –