【发布时间】:2011-10-08 07:53:13
【问题描述】:
有两个以Int 为参数的简单类:
case class Foo(i: Int)
class Bar(j: Int)
我可以说:
List(1,2,3) map Foo
效果很好,相当于更详细一点:
List(1,2,3) map {Foo(_)}
但是Bar(因为它不是案例类?)不能在同一个构造中使用:
List(1,2,3) map Bar
error: not found: value Bar
List(1,2,3) map Bar
^
是否有一些特殊的语法可以引用任何构造函数并利用 eta 扩展?与Foo 相比,List(1,2,3) map {new Bar(_)} 似乎更冗长。
【问题讨论】:
-
Eta 扩展是发生在方法上的事情。请注意,构造函数不是方法。
-
@DanielC.Sobral 究竟什么是构造函数?
-
@AshkanKh.Nazary 构造函数是一系列指令,用于初始化新分配的对象。
-
@DanielC.Sobral 那不是方法或函数吗?您不能显式调用它或传递它或对其应用 eta 扩展以将其转换为函数?
-
@AshkanKh.Nazary 不,你不能。例如,试试
new String _。它在字节码级别也有所不同,方法和构造函数之间的 JVM 期望也存在各种差异。
标签: scala constructor higher-order-functions