实例化一个类 - 有没有Parens?

时间:2014-01-23 03:18:46

标签: scala

scala> class A { ... }
defined class A

A可以使用或不使用括号进行实例化:

scala> val a = new A
a: A = A@4a27b5cd

scala> val aaa = new A()
aaa: A = A@68aa419e

哪种形式(更多)惯用?

如果包括括号,据我所知,创建一个对象是side effect,类似于0-arity argument's style

1 个答案:

答案 0 :(得分:3)

我在这里写了一个类似的答案: https://stackoverflow.com/a/20664517/1296806

特别相关的是,构造函数与parens的方法不同。

构造函数始终具有非隐式参数列表。如果在定义中省略它,则提供它。

new A是惯用的。 (如果需要对其进行合理化,请将实例视为结果。如果实例化是一种副作用,那么任何非原始的都不是纯粹的。)

new A().a需要parens,因此它们在语法上很有用。

如果隐含的话,你必须提供parens;看到链接。