tutorial parametro localizacion fungicida examples estadistica escala distribucion blanquerna scala

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