Scala:咖喱构造函数

Scala:咖喱构造函数,scala,constructor,currying,Scala,Constructor,Currying,我有以下Scala类: class Person(var name : String, var age : Int, var email : String) 我想将Person构造函数用作curry函数: def mkPerson = (n : String) => (a : Int) => (e : String) => new Person(n,a,e) 这是可行的,但还有其他方法可以实现吗?这种方法似乎有点乏味,而且容易出错。我可以想象类似Function.curri

我有以下Scala类:

class Person(var name : String, var age : Int, var email : String)
我想将Person构造函数用作curry函数:

def mkPerson = (n : String) => (a : Int) => (e : String) => new Person(n,a,e)
这是可行的,但还有其他方法可以实现吗?这种方法似乎有点乏味,而且容易出错。我可以想象类似Function.curried的东西,但是对于构造函数来说。

可能是这样的:

val mkPerson = Function.curried((n: String,a:Int,e:String) => new Person (n,a,e))
这将有助于:

def mkPerson = (new Person(_, _, _)).curried

这次聚会有点晚了,但如果你把
Person
作为案例类:

scala> case class Person(name: String, age: Int, email: String)
defined class Person
Scala生成一个包含
Person.apply(String,Int,String)
和一些其他内容的伴生对象。然后你可以做:

scala> Person.curried
res5: String => (Int => (String => Person)) = <function1>

它也适用于var参数。

我明白了。它仍然比我希望的更复杂:我在想一些更接近Haskell构造函数的东西。请注意,如果您确定要调用它,不妨将其命名为
val mkPerson=…
。另外,如果Person是一个case类,您可以简单地使用
(Person.apply)
(Person.apply _).curried