Załóżmy, że mamy wspólną cechę Model.Czy jest możliwe zaktualizowanie pól dowolnej klasy przypadku implementującej wspólną cechę?
trait Model {
def id: String
def updated: Date
}
Mamy 2 klasy przypadków rozszerzające tę cechę.
case class C1(id: String, updated: Date, foo: String) extends Model
case class C2(id: String, updated: Date, bar: Int) extends Model
Czy można napisać funkcję narzędzia podobną do poniższej, która pobiera parametr Model jako i zwraca kopię o zaktualizowanej wartości zaktualizowanego pola?
object Model {
def update[T <: Model](model: T): T = {
model.copy(updated = new Date) // This code does not compile.
}
}
[Nie] (http://stackoverflow.com/q/12370244/298389) –
@ Om-nom-nom tak ;-) –
@MilesSabin [Widziałem tę abstrakcję nad arity został wymieniony] (http://stackoverflow.com/a/12492635/298389), ale takie nadmierne przesuwanie jest mało realną opcją (teraz możesz swobodnie nazywać mnie "stronniczym" lub nawet kretynem :-)). Czy jest jeszcze jakiś inny sposób? –