在 scala 中柯里化 case class 构造函数的可能方法
Possible ways for currying case class constructor in scala
参考下面的link
Scala: curried constructors
class Person(var name : String, var age : Int, var email : String)
def mkPerson = (n : String) => (a : Int) => (e : String) => new Person(n,a,e)
def makeName(s:String):String="Hello"+s
def makeAge(age:Int):Int=age
def makeEmail(email:String):String=email
val s=mkPerson(makeName("abcd"))
val t1=s(makeAge(2))
val t2=t1(makeEmail("abc@gmail.com"))
我创建了方法 makeName
、makeAge
、makeEmail
来丰富这些值。实际用例不同
问题
- 有没有什么方法可以通过case 类
- 我不想使用变量
s
,t1
,t2
- 我们能否通过部分应用函数来实现上述目标
不确定柯里化函数在这种情况下是否必要/是否有用,如果您接受带有 3 个参数的 mkPerson
:
case class Person private(name: String, age: Int, email: String)
def makeName(s: String): String = "Hello" + s
def makeAge(age: Int): Int = age
def makeEmail(email: String): String = email
def mkPerson(name: String, age: Int, email: String): Person =
Person(makeName(name), makeAge(age), makeEmail(email))
println(Person("Jane", 29, "jane@mail.com")) // no enrichment: Person(Jane,29,jane@mail.com)
println(mkPerson("Jane", 29, "jane@mail.com")) // enriched: Person(HelloJane,29,jane@mail.com)
然后,如果你真的需要它,你可以咖喱mkPerson
:
val curried = (mkPerson _).curried
curried("Jane")(29)("jane@mail.com") // same enriched result
参考下面的link Scala: curried constructors
class Person(var name : String, var age : Int, var email : String)
def mkPerson = (n : String) => (a : Int) => (e : String) => new Person(n,a,e)
def makeName(s:String):String="Hello"+s
def makeAge(age:Int):Int=age
def makeEmail(email:String):String=email
val s=mkPerson(makeName("abcd"))
val t1=s(makeAge(2))
val t2=t1(makeEmail("abc@gmail.com"))
我创建了方法 makeName
、makeAge
、makeEmail
来丰富这些值。实际用例不同
问题
- 有没有什么方法可以通过case 类
- 我不想使用变量
s
,t1
,t2
- 我们能否通过部分应用函数来实现上述目标
不确定柯里化函数在这种情况下是否必要/是否有用,如果您接受带有 3 个参数的 mkPerson
:
case class Person private(name: String, age: Int, email: String)
def makeName(s: String): String = "Hello" + s
def makeAge(age: Int): Int = age
def makeEmail(email: String): String = email
def mkPerson(name: String, age: Int, email: String): Person =
Person(makeName(name), makeAge(age), makeEmail(email))
println(Person("Jane", 29, "jane@mail.com")) // no enrichment: Person(Jane,29,jane@mail.com)
println(mkPerson("Jane", 29, "jane@mail.com")) // enriched: Person(HelloJane,29,jane@mail.com)
然后,如果你真的需要它,你可以咖喱mkPerson
:
val curried = (mkPerson _).curried
curried("Jane")(29)("jane@mail.com") // same enriched result