请考虑以下事项:
class A(foo: Int)(bar: Int)(baz: Int)
object A{
def apply(foo: Int)(bar: Int)(baz: Int) = new A(foo)(bar)(baz)
}
使用apply方法,我可以执行以下操作:
scala> A(1)(2)(3)
res12: Script.A = Script$A@7a6229e9
scala> A(1)_
res13: Int => (Int => Script.A) = <function1>
为什么我不能做以下事情:
scala> new A(1)_
<console>:21: error: missing arguments for constructor A in class A
new A(1)_
^
我错过了语法明智吗?我认为构造函数只是类中的方法,所以它们应该在需要时被提升到函数(就像上面的apply方法一样)
答案 0 :(得分:2)
在应该创建该类实例的类上调用new
(在你的情况下为A),但是你要对new A(1) _
做的是使A类的实例不完整承包商的数据,根本不符合逻辑。但是编写A(1) _
是正确且合乎逻辑的原因在这种情况下,您将方法提升为函数(来自伴随对象的apply
方法),该方法已经拥有构成该类实例的所有数据。