scala – 使用构造函数所在的函数
发布时间:2020-12-16 09:00:50 所属栏目:安全 来源:网络整理
导读:有两个简单的类以Int作为参数: case class Foo(i: Int) class Bar(j: Int) 我可以说: List(1,2,3) map Foo 哪个工作正常,相当于更冗长: List(1,3) map {Foo(_)} 但是Bar(因为它不是案例类?)不能在同一个构造中使用: List(1,3) map Bar error: not found
有两个简单的类以Int作为参数:
case class Foo(i: Int) class Bar(j: Int) 我可以说: List(1,2,3) map Foo 哪个工作正常,相当于更冗长: List(1,3) map {Foo(_)} 但是Bar(因为它不是案例类?)不能在同一个构造中使用: List(1,3) map Bar error: not found: value Bar List(1,3) map Bar ^ 是否有一些特殊的语法来引用任何构造函数并利用eta扩展?与Foo相比,List(1,3)map {new Bar(_)}似乎有点冗长. 解决方法
它适用于前一种情况,因为案例类的伴随对象扩展了适当的FunctionN特征. (对象Foo在您的示例中扩展(Int => Foo).)对于非案例类,您可以手动执行此操作:
scala> class Bar(i: Int) defined class Bar scala> class Bar(i: Int); object Bar extends (Int => Bar) { def apply(i: Int) = new Bar(i) } defined class Bar defined module Bar scala> List(2,3) map Bar res17: List[Bar] = List(Bar@1f99e90,Bar@1191056) IMO最好选择新的Bar(_),因为这个额外的样板可能不值得实现这一点. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |