un rasgo sellado es lo mismo que una clase sellada?
Hasta donde sealedllega, sí. Comparten las diferencias normales entre traity class, por supuesto.
O, si no, ¿cuáles son las diferencias?
Discutible.
¿Cuándo es una buena idea usar un rasgo sellado (y cuándo no)?
Si tiene un sealed class X, entonces tiene que verificar X, así como cualquier subclase. Lo mismo no es cierto para sealed abstract class Xo sealed trait X. Entonces podría hacerlo sealed abstract class X, pero eso es mucho más detallado que solo traity con poca ventaja.
La principal ventaja de usar un abstract classover a traites que puede recibir parámetros. Esa ventaja es particularmente relevante cuando se usan clases de tipos. Digamos que quieres construir un árbol ordenado, por ejemplo. Puedes escribir esto:
sealed abstract class Tree[T : Ordering]
pero no puedes hacer esto:
sealed trait Tree[T : Ordering]
ya que los límites de contexto (y los límites de vista) se implementan con parámetros implícitos. Dado que los rasgos no pueden recibir parámetros, no puedes hacerlo.
Personalmente, lo prefiero sealed traity lo uso a menos que alguna razón en particular me haga usar a sealed abstract class. Y no estoy hablando de razones sutiles, sino de razones que no puedes ignorar, como usar clases de tipos.