*我们知道scala数组包含相同类型的数据.但当我宣布数组为
var a = new Array[Any](3)
Run Code Online (Sandbox Code Playgroud)
我能够存储不同的数据类型.
a(0)=5
a(1)="hello"
a(2)=1.5
Run Code Online (Sandbox Code Playgroud)
这怎么可能?如果它是错的那么我们在scala中有什么选项来存储不同的数据类型?*
"相同类型"的概念总是取决于一般性.在Scala中,一般性的级别由正式类型决定.
3和7"是同一类型"吗?如果我们写...
val a : Int = 3
val b : Int = 7
Run Code Online (Sandbox Code Playgroud)
然后他们是同一类型Int.但是,如果我们定义位长限制Int类型(我们非常欢迎在Scala中做),我们可能会写
val a : Int2 = 3
val b : Int3 = 7
Run Code Online (Sandbox Code Playgroud)
它们似乎不再是同一类型!
如果我们定义继承层次结构
trait Animal;
class Dog extends Animal;
class Frog extends Animal;
Run Code Online (Sandbox Code Playgroud)
然后做Dog与Frog具有相同类型的?如果我们写
val d : Dog = new Dog
val f : Frog = new Frog
Run Code Online (Sandbox Code Playgroud)
然后看起来答案是否定的.但是如果我们写的话
val d : Animal = new Dog
val f : Animal = new Frog
Run Code Online (Sandbox Code Playgroud)
那么他们看起来确实有相同的类型.与此一致,如果我声明一个类似的数组
val arr : Array[Dog] = Array.ofDim[Dog](5)
Run Code Online (Sandbox Code Playgroud)
然后我不能把青蛙放进去,因为青蛙不是狗.但是如果我声明一个类似的数组
val arr : Array[Animal] = Array.ofDim[Animal](5)
Run Code Online (Sandbox Code Playgroud)
当然,青蛙和狗都可以进入它,因为在一般性的水平上Animal,青蛙和狗都有相同的类型.
在Scala中Any是所有其他类型派生的基本类型.因此,在一个非常高的水平一般性,5,"hello",和1.5,都具有相同的类型Any,就像在较高水平一般性Frog和Dog有相同的类型Animal.因此,有投入没有问题5,"hello"和1.5成Array[Any].
| 归档时间: |
|
| 查看次数: |
3352 次 |
| 最近记录: |