scala> val a = Int
a: Int.type = object scala.Int
scala> val a = String
<console>:11: error: object java.lang.String is not a value
val a = String
^
为什么scala不会java.lang.String
为了创造String
价值而在周围创建薄包装纸?当主要类型(String
)之一不能在表达式中使用或不能传递给函数或从函数返回时,它不是很严格吗?
好吧...在Scala中class
可以有伴随对象。
而任何对象的同伴对象class A
实际上是的实例A.type
。
所以...当你这样做
val i = Int
你得到的是companion object
的class Int
是的实例Int.type
请记住,这Int
仍然不是价值...您拥有的这东西不是Int
。它也不是的实例Int
。它是的实例Int.type
。
但是就String
……而言,它被定义为java.lang.String
Java世界中相应名称的别名,因此没有这样的别名companion object
。因此,该val
分配不适用于它。
至于为什么String
不包裹在Scala中。可能有很多原因。但是一个主要原因是因为不需要这样做。
Scala希望具有pure
对象层次结构,以便一切都是对象,并从同一根继承Any
。和Java有基本的类型一样int
,long
等等......这不是对象...这创造了需要它们包装成Int
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句