Ответ 1
Это будет работать:
def mkPerson = (new Person(_, _, _)).curried
У меня есть следующий класс 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, но затем для конструкторов.
Это будет работать:
def mkPerson = (new Person(_, _, _)).curried
Немного поздно для этой стороны, но если вы сделаете 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.
может быть таким:
val mkPerson = Function.curried((n: String,a:Int,e:String) => new Person (n,a,e))