指定要应用eta扩展的方法的方法签名

时间:2019-05-08 20:19:16

标签: scala scala-placeholder-syntax eta-expansion

有没有一种方法可以指定要应用 eta扩展的方法的签名? 例如:

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>font-awesome</artifactId>
    <version>4.7.0</version>
</dependency>

引发编译错误:

val tupleNum = (1L,2L)

case class CaseClass(a:String, b:String)
object CaseClass {
  def apply(a: Long, b: Long): CaseClass = new CaseClass(s"${a}", s"${b}")
}

println( (CaseClass.apply _).tupled(tupleNum) )

谢谢!

BTW: eta扩展是使用 _ 的正确术语吗?

1 个答案:

答案 0 :(得分:3)

  • 如果要指定签名,则无论如何都必须指定参数的类型。
  • 如果您已经指定了参数类型,则可以只使用占位符。

这里可以编译并运行正常(避免使用:paste模式的怪异缩进):

case class C(a: String, b: String); object C {
  def apply(a: Long, b: Long): C = C(s"$a", s"$b")
}

val t = (1L, 2L)
println((C.apply(_: Long, _: Long)).tupled(t))

或更确切地说

println((C(_: Long, _: Long)).tupled(t))