代码之家  ›  专栏  ›  技术社区  ›  Chris Eidhof

Scala:咖喱构造函数

  •  20
  • Chris Eidhof  · 技术社区  · 16 年前

    我有以下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)
    

    这是可行的,但有没有其他方法来实现这一点?这种方法似乎有点乏味,而且容易出错。我可以想象函数.curried,但对于构造函数。

    3 回复  |  直到 16 年前
        1
  •  21
  •   Daniel C. Sobral    16 年前

    这将起作用:

    def mkPerson = (new Person(_, _, _)).curried
    
        2
  •  10
  •   Erik Post    12 年前

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

    scala> case class Person(name: String, age: Int, email: String)
    defined class Person
    

    Person.apply(String, Int, String) 还有一些其他的东西给你。然后你可以做:

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

    简称:

    (Person.apply _).curried
    

    它也适用于var参数。

        3
  •  8
  •   walla    16 年前

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