在 scala 中柯里化 case class 构造函数的可能方法

Possible ways for currying case class constructor in scala

参考下面的link Scala: curried constructors

 class Person(var name : String, var age : Int, var email : String)
  def mkPerson = (n : String) => (a : Int) => (e : String) => new Person(n,a,e)
  def makeName(s:String):String="Hello"+s
  def makeAge(age:Int):Int=age
  def makeEmail(email:String):String=email

  val s=mkPerson(makeName("abcd"))
  val t1=s(makeAge(2))
  val t2=t1(makeEmail("abc@gmail.com"))

我创建了方法 makeNamemakeAgemakeEmail 来丰富这些值。实际用例不同

问题

不确定柯里化函数在这种情况下是否必要/是否有用,如果您接受带有 3 个参数的 mkPerson

case class Person private(name: String, age: Int, email: String)

def makeName(s: String): String = "Hello" + s
def makeAge(age: Int): Int = age
def makeEmail(email: String): String = email

def mkPerson(name: String, age: Int, email: String): Person =
  Person(makeName(name), makeAge(age), makeEmail(email))

println(Person("Jane", 29, "jane@mail.com"))   // no enrichment: Person(Jane,29,jane@mail.com)
println(mkPerson("Jane", 29, "jane@mail.com")) // enriched: Person(HelloJane,29,jane@mail.com)

然后,如果你真的需要它,你可以咖喱mkPerson

val curried = (mkPerson _).curried
curried("Jane")(29)("jane@mail.com")  // same enriched result