Scala: qual è stata la considerazione del progetto desiderata per l'istanza nulla nell'esempio

0

O semplicemente chiesto PERCHÉ?
Semplicemente non sembra logico ...

if ( null.asInstanceOf[String]  == null )  println 
("null.asIstanceOf[String] is null")

println ("BUT !!!")

if ( null.asInstanceOf[Double] == 0.0 ) println ( 
"null.AsInstanceOf[Double] is 0 !!" )
    
posta Yordan Georgiev 10.08.2018 - 13:59
fonte

2 risposte

1

Questo è in realtà spiegato esplicitamente nella Specifica della lingua di Scala . Per favore, dai un'occhiata a Sezione 6.3 Il Null value , che dice questo:

The null value is of type scala.Null, and thus conforms to every reference type. It denotes a reference value which refers to a special null object. This object implements methods in class scala.AnyRef as follows:

  • […]
  • asInstanceOf[T] returns the default value of type T.

Il valore predefinito per qualsiasi sottotipo di AnyRef è null , il valore predefinito per i sottotipi di AnyVal è specifico del tipo, ma di solito un valore neutro specifico del tipo, come 0 per Int , Long , ecc., 0.0 per Float e Double e false per Boolean .

    
risposta data 10.08.2018 - 19:14
fonte
1

Un Double è un tipo primitivo quindi non può essere null ; citando dal 2.13 Riferimento bibliografico standard :

Double, a 64-bit IEEE-754 floating point number (equivalent to Java's double primitive type)

Un String d'altra parte è ovviamente un oggetto completo e quindi può essere null .

Per inciso, probabilmente non dovresti usare null nel tuo codice Scala comunque .

    
risposta data 10.08.2018 - 14:19
fonte

Leggi altre domande sui tag