vocabulario una superfluos superfluo significados significa ser que persona organismos evacuación etimología español arte scala parameters implicit scala-option

scala - una - ¿Por qué el método Opción o No tiene este argumento implícito superfluo?



superfluo etimología (2)

Me pregunto cuál es el motivo de la (implicit ev: Null <:< A1) aquí:

sealed abstract class Option[+A] extends Product with Serializable { def orNull[A1 >: A](implicit ev: Null <:< A1): A1 = this getOrElse null ... }

No lo haría

def orNull[A]: A = this getOrElse null

sea ​​suficiente teniendo en cuenta que ni siquiera parece funcionar con tipos de valor como

Option(1).orNull

pero

Option(1).getOrElse(null)

¿hace?

Código fuente de la Option


No todos los tipos de scala pueden ser nulos. En particular, Any tiene dos hijos, AnyRef y AnyVal. AnyRef puede manejar tipos nulos. Los tipos AnyVal pueden ser primitivos en la JVM y, por lo tanto, no pueden ser nulos. Lo implícito es una verificación de tipo demorada que permite que Option [String] use o No, pero no Opción [Int].

Nota: Esta dicotomía de que Int es un objeto / primitiva en caja / sin caja tiene manifestaciones muy extrañas en Scala, como null.asInstanceOf [Int] == ​​0 // true.


scala> abstract class Op[A] { | def getOrElse(b: A): A | def orNull[A]: A = this getOrElse null | } <console>:14: error: type mismatch; found : Null(null) required: A def orNull[A]: A = this getOrElse null ^

Entonces, null no es un tipo aceptable para todos los A , solo para los que aceptan null . Las subclases de AnyVal son ejemplos típicos de tipos que no AnyVal . En ausencia de ese parámetro, no es posible escribir este método.