w Scala,Dlaczego typy pierwotne, takie jak Int Intrased to Object in Scala?
{ x: Option[Int] => x }
.getClass
.getMethod("apply", classOf[Option[_]])
.getGenericParameterTypes
powraca Array(scala.Option<java.lang.Object>)
. Początkowo spodziewałem się zobaczyć zamiast tego Array(scala.Option<scala.Int>)
, ale widzę, że scala.Int
jest klasą wartości (rozszerza się AnyVal
), "której instancje nie są reprezentowane jako obiekty przez podstawowy system hosta".
Mimo to nadal nie rozumiem usunięcia do Object
. Czy nie może być o wiele bardziej użyteczna?
To nie Scala robi to - to jest Java. Aby uzyskać użyteczność, tak jak w przypadku nieobiektu, wynika z "TypicParameterTypes" (metody obiektu klasy Java), należy utworzyć Subklasę. Scala * nie * utworzył podklasy, powiedz 'OptionInt', dla' Option [Int] '. (Zobacz @specjalized, być może?) –
@ pst; Myślę, że jesteś na niewłaściwym torze. Zmień 'Int' na' Symbol' powyżej i otrzymasz 'Array (scala.Option)'. –
Hmm, cóż tam jest moja hipoteza: -/I winię magię kompilatora. –