Передать непримененный класс случая в функцию

У меня есть класс 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

person ov7a    schedule 12.10.2017    source источник
comment
(func _).tupled(User.unapply(user).get) работает и немного короче   -  person Tom    schedule 12.10.2017


Ответы (1)


Самое простое решение для ванильного Scala — это то, что Том предложил в комментариях:

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

Если в области действия есть Shapeless (возможно, это уже зависимость), вы также можете использовать его для преобразования user в кортеж:

import shapeless._

val gen = Generic[User]
(func _).tupled(gen.to(user).tupled)
person Gabriele Petronella    schedule 12.10.2017