将未应用的案例类传递给函数

时间:2017-10-12 10:48:14

标签: scala function tuples case-class

我有一个包含两个字段的case类和一个接受相同参数的函数。在没有明确指定所有字段或丑陋的未应用的情况下,将case case的内容传递给此函数的方法是什么?

case class User(name: String, age: Int)
val user = User("Peter", 23)

def func(name: String, age: Int) = {...}

func(user.name, user.age) //works
Function.tupled(func(_,_))(User.unapply(user).get) //works, but ugly
// func(_,_) is explicit because it can be a method of a class

1 个答案:

答案 0 :(得分:2)

最简单的vanilla Scala解决方案是Tom在评论中提出的解决方案:

(func _).tupled(User.unapply(user).get)

如果在范围内碰巧有Shapeless(也许它已经是依赖),你也可以使用它将user转换为元组:

import shapeless._

val gen = Generic[User]
(func _).tupled(gen.to(user).tupled)