加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在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方法),该函数已经拥有了构成该类实例的所有数据.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读