考虑以下:
class A(foo: Int)(bar: Int)(baz: Int)
object A{
def apply(foo: Int)(bar: Int)(baz: Int) = new A(foo)(bar)(baz)
}
Run Code Online (Sandbox Code Playgroud)
使用apply方法,我可以执行以下操作:
scala> A(1)(2)(3)
res12: Script.A = Script$A@7a6229e9
scala> A(1)_
res13: Int => (Int => Script.A) = <function1>
Run Code Online (Sandbox Code Playgroud)
为什么我不能做以下事情:
scala> new A(1)_
<console>:21: error: missing arguments for constructor A in class A
new A(1)_
^
Run Code Online (Sandbox Code Playgroud)
我错过了语法明智吗?我认为构造函数只是类中的方法,所以它们应该在需要时被提升到函数(很像上面的apply方法)
调用new该类应该创建该类的实例(在您的例子中为 A),但您想要做的new A(1) _是在没有承包商完整数据的情况下创建 A 类的实例,这本质上根本不合逻辑。但编写A(1) _是正确且符合逻辑的,因为在这种情况下,您将一个方法提升为一个函数(apply来自伴随对象的方法),该函数已经拥有创建该类的实例的所有数据。
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |