参加两门简单的课程Int
作为一个论点:
case class Foo(i: Int)
class Bar(j: Int)
我可以说:
List(1,2,3) map Foo
效果很好,相当于更详细一点:
List(1,2,3) map {Foo(_)}
However Bar
(因为它不是案例类?)不能在同一构造中使用:
List(1,2,3) map Bar
error: not found: value Bar
List(1,2,3) map Bar
^
是否有一些特殊的语法来引用任何构造函数并利用 eta 扩展?List(1,2,3) map {new Bar(_)}
相比之下似乎有点冗长Foo
.
它适用于前一种情况,因为案例类的伴生对象扩展了适当的FunctionN
特征。 (object Foo extends (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最好一起去new Bar(_)
因为这个额外的样板可能不值得实现一点点的简洁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)