斯卡拉:咖喱的施工人员

时间:2010-10-05 10:18:57

标签: scala constructor currying

我有以下Scala类:

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

我想将Person构造函数用作curried函数:

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

这样可行,但有另一种方法可以实现吗?这种方法似乎有点乏味且容易出错。我可以想象像Function.curried这样的东西,然后是构造函数。

3 个答案:

答案 0 :(得分:20)

这将有效:

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

答案 1 :(得分:10)

这个派对有点晚了,但如果你让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参数。

答案 2 :(得分:8)

可能如此:

val mkPerson = Function.curried((n: String,a:Int,e:String) => new Person (n,a,e))