【发布时间】:2012-10-31 19:40:28
【问题描述】:
Scala-lang 参考 5.5.1 和 6.6.1 给我的印象是默认参数可以引用以前评估过的参数:
class Test(val first: String, val second: String = first)
但从实验看来,这样做的唯一方法是使用以下形式:
class Test(val first: String)(val second: String = first)
然后定义一个辅助构造函数或一个创建伴生类,以避免在创建时指定第二组括号。我不太明白第二个构造函数是如何工作的,它看起来像一个柯里化函数,所以我可能猜想有必要独立于second 评估first,这是正确的吗?这种形式是必要的还是有一些语法糖我可以用来调整第一个构造函数来做我想做的事?
【问题讨论】:
-
current Scala Language Specification 中没有(子)第 5.5.1 节。您的意思是 5.1.1(“构造函数调用”)吗?
-
是的,应该是 5.1.1。正如@Travis Brown 所指出的,第 5.3 节在评估参数时定义参数的范围将解释编译错误。
标签: scala constructor operator-precedence default-parameters default-arguments