parametro - scala vs python
Tipo de parĂ¡metro no se extiende el tipo dado (1)
Me gustaría definir un genérico tal que su parámetro de tipo NO extienda un tipo dado.
Por ejemplo,
trait myTrait[T <: Throwable] {
// ....
}
Definiría un rasgo donde su parámetro de tipo extiende Throwable. Quiero algo como (no código real de Scala):
trait myTrait[T Not(<:) Throwable] {
// ....
}
Donde el tipo de parámetro de tipo NO extiende Throwable. ¿Hay alguna manera de construir tal noción en Scala?
Puedes hacer tal cosa usando implícitos. Aquí hay un truco de Miles Sabin en scala-language:
// Encoding for "A is not a subtype of B"
trait <:!<[A, B]
// Uses ambiguity to rule out the cases we''re trying to exclude
implicit def nsub[A, B] : A <:!< B = null
implicit def nsubAmbig1[A, B >: A] : A <:!< B = null
implicit def nsubAmbig2[A, B >: A] : A <:!< B = null
// Type alias for context bound
type NOT[T] = {
type Lambda[U] = U <:!< T
}
// foo does not accept T of type Unit
def foo[T : NOT[Unit]#Lambda](t : T) = t