Ho un insieme di classi case similiCome eseguire la corrispondenza del modello con le classi di casi vararg?
abstract class Shape
case class Rectangle(width: Int, height: Int) extends Shape
case class Location(x: Int, y: Int, shape: Shape) extends Shape
case class Circle(radius: Int) extends Shape
case class Group(shape: Shape*) extends Shape
dove in sostanza Group è una matrice di forme. Devo definire un metodo di dimensione per calcolare le dimensioni per il rettangolo, il cerchio e la posizione, è semplice restituirne uno. Ma sto avendo difficoltà per il gruppo.
object size extends Shape{
def size(s: Any) : Int = s match {
case Rectangle(x,y) => 1
case Group // how to do it? Also having case Group(shape : Shape*) gives an error
case Circle(r) => 1
case Location(x,y,shape) => 1
}
}
So per il gruppo ho bisogno di usare la mappa e piegare a sinistra, ma davvero non posso creare una logica per questo. Grazie
Questo non tiene conto delle sovrapposizioni. È importante? – PanCrit
puoi spiegarmi come funziona l'ultima linea troppo strana ????? case Group (shapes @ _ *) => (0 /: shapes) {_ + size (_)} – tom
@PanCrit: Non sono così fluente in Scala - Potresti spiegare cosa si intende con * sovrapposizione *, per favore ? – Dario