Skip to content

14-数组类型(2)

介绍

除了引用类型的数组 Array,仓颉还引入了值类型数组 VArray

Array是引用类型

Varray是值类型

由于值类型本身在传递和赋值时的拷贝,会产生额外的性能开销,因此建议不要在性能敏感场景使用较大长度的 VArray

值类型和引用类型

不管是什么样的变量,它总归是和一个值联系在一起的。在实际使用这些变量的时候,对于一部分变量,我们会直接拿这个值本身来用,像这样的变量就叫做值类型变量。而对于另外一些变量,我们是把这个值当作一个 地址,然后去拿这个 地址 所指向的数据来用,这种变量就被叫做引用类型变量。值类型变量都有属于自己的一份数据副本,相互之间是独立的。

比如:

我们每一个同学都会被分配了一个一模一样的宿舍。大家的宿舍装扮虽然都一样,但是是互相独立的,各自占用各自的空间互不影响的。这样的房间其实就是值类型。

    var a = 100 // 内存空间1
    var b = 100 // 内存空间2
    a = 300 //  修改了a 但是b不受影响

再比如:

我们4个同学被分配到了同一个宿舍,大家每人都拿着一把钥匙,通过钥匙打开的宿舍,是同一个宿舍,如果同学A新搬进去了一台电视,那么其他同学通过钥匙打开宿舍了之后,也会看到这个电视。这样会出现修改了引用来类型的数据,其他还保持有这个地址的元素,在访问这个数据的时候,也会发生变化。

    let a = [1, 2, 3, 4]
    let b = a
    b[0] = 100 // a[0] 也成了100

VArray 基本用法

VArray 在使用时,类型声明不能省略,否则就会变成普通的 Array了

    let a: VArray<Int64, $3> = [1, 2, 3] // Int64 表示类型, $3表示长度, $不能省

VArray 指定长度和内容

let b = VArray<Int64, $5>({i => i}) // [0, 1, 2, 3, 4]

其他用法和Array类似

Released under the MIT License.