22

我有以下 Scala 类:

class Person(var name : String, var age : Int, var email : String)

我想将 Person 构造函数用作柯里化函数:

def mkPerson = (n : String) => (a : Int) => (e : String) => new Person(n,a,e)

这行得通,但是还有另一种方法可以做到这一点吗?这种方法似乎有点乏味且容易出错。我可以想象像 Function.curried 之类的东西,但是对于构造函数。

4

3 回答 3

21

这将起作用:

def mkPerson = (new Person(_, _, _)).curried
于 2010-10-05T15:04:59.167 回答
11

这个聚会有点晚了,但如果你做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>

这是以下的简写:

(Person.apply _).curried

它也适用于 var 参数。

于 2014-01-11T14:22:10.600 回答
8

可能是这样:

val mkPerson = Function.curried((n: String,a:Int,e:String) => new Person (n,a,e))
于 2010-10-05T10:56:48.263 回答