Chr*_*hof 20 constructor scala currying
我有以下Scala类:
class Person(var name : String, var age : Int, var email : String)
Run Code Online (Sandbox Code Playgroud)
我想使用Person构造函数作为curried函数:
def mkPerson = (n : String) => (a : Int) => (e : String) => new Person(n,a,e)
Run Code Online (Sandbox Code Playgroud)
这有效,但还有另一种方法可以做到这一点吗?这种方法似乎有点乏味且容易出错.我可以想象像Function.curried这样的东西,但是对于构造函数来说.
Dan*_*ral 20
这将有效:
def mkPerson = (new Person(_, _, _)).curried
Run Code Online (Sandbox Code Playgroud)
eri*_*sei 10
这个派对有点晚了,但如果你做Person
了一个案例类:
scala> case class Person(name: String, age: Int, email: String)
defined class Person
Run Code Online (Sandbox Code Playgroud)
Scala会Person.apply(String, Int, String)
为您生成包含其他内容的伴随对象.然后你可以这样做:
scala> Person.curried
res5: String => (Int => (String => Person)) = <function1>
Run Code Online (Sandbox Code Playgroud)
这是简写:
(Person.apply _).curried
Run Code Online (Sandbox Code Playgroud)
它也适用于var参数.
可能是吧:
val mkPerson = Function.curried((n: String,a:Int,e:String) => new Person (n,a,e))
Run Code Online (Sandbox Code Playgroud)