在Scala中部分应用curried构造函数
发布时间:2020-12-16 18:33:38 所属栏目:安全 来源:网络整理
导读:考虑以下: 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@7a6229e9scala A(1)_res13: Int = (Int =
考虑以下:
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方法) 解决方法
在类上调用new应该创建该类的实例(在你的情况下为A),但是你想要用新的A(1)_做的是创建一个A类的实例而没有完整的承包商数据,根本不合逻辑.但是编写A(1)_是正确的,逻辑上的原因在这种情况下,你将一个方法提升到一个函数(来自一个伴随对象的apply方法),该函数已经拥有了构成该类实例的所有数据.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |