我有一个包含两个字段的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
答案 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)