在 Scala 中的函数定义之前放置 case class 是什么意思?

What does putting a case class before function definition in scala mean?

scala 中的语法是什么

  final case class Transform[A, B](transform: A => Seq[B]) extends AnyVal


  override def newInstance() = Transform { myParameter: myParameter =>
    someOtherFunctionA(someOtherFunctionB.transform(myParameter)).toSeq
  }

在函数定义之前(参数之前)放置一个 case class 类型是什么意思?

在 Scala 中,您还可以拥有函数值,它们是 Function1[A, B]A => B 的实例(另一种写法 Function1[A, B])。这与 IntegerString.

的实例没有什么不同
scala> val s: String = "abc"
// val s: String = abc

scala> val f: String => String = s => s + " added part"
// val f: String => String = $Lambda50/0x0000000800684040@632383b9

在 Scala 中,case classes 定义如下

case class MyCaseClass(
  // these are constructor value members of the class
  s: String,
  // similar to above string member, your case class can also have a function member
  f: String => String
)

所以,当你写作时

final case class Transform[A, B](transform: A => Seq[B]) extends AnyVal

您只是在定义一个 case class,它具有 Function1[A, Seq[B]]A => Seq[B].

类型的成员

现在,当您创建此 class 的实例时,您必须提供 A => Seq[B] 值作为构造函数参数。

您可以通过显式定义函数值然后传递给构造函数来实现,

scala> val transformFunction: String => Seq[Char] = s => s.toCharArray.toIndexedSeq
// val transformFunction: String => Seq[Char] = $Lambda95/0x0000000800758840@20711b02

scala> val transformInstance: Transform[String, Char] = Transform(transformFunction)
// val transformInstance: Transform[String,Char] = Transform($Lambda95/0x0000000800758840@20711b02)

或者,您可以直接提供值

scala> val transformInstance: Transform[String, Char] = Transform { s: String => s.toCharArray.toIndexedSeq }
// val transformInstance: Transform[String,Char] = Transform($Lambda11/0x00000008007b4040@6dc010a2)```