Подтвердить что ты не робот

Scala: встроенные конструкторы

У меня есть следующий класс 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, но затем для конструкторов.

4b9b3361

Ответ 1

Это будет работать:

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

Ответ 2

Немного поздно для этой стороны, но если вы сделаете Person класс case:

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.

Ответ 3

может быть таким:

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