[Swift] 数组恒等 === 的 bug?!

Swift 中的数组是由结构体实现的:

struct Array<T> : MutableCollection, Sliceable {
    typealias Element = T
    var startIndex: Int { get }
    var endIndex: Int { get }
    subscript (index: Int) -> T
    func generate() -> IndexingGenerator<T[]>
    typealias SliceType = Slice<T>
    subscript (subRange: Range<Int>) -> Slice<T>
    init(_ buffer: ArrayBuffer<T>)
}

由上面的代码可以猜到,数组自身是不存放元素的,数组关联到一个存放元素的 buffer(元素存储区)。

而数组的恒等 === 在文档中是这么说的:

Check whether two arrays or subarrays share the same storage and elements by comparing them with the identity operators (===and!==).

数组的恒等 === 判断即判断两个数组所关联的元素存储区是否相同。

但 XCode 6 Beta 测试下来,结果大为迥异:

var a = [1, 2, 3]
var b = a
var c = a

println("a === a: \(a === a), b === c: \(b === c)");

结果为:

a === a: false, b === c: false

这应该是编译器的一个 BUG。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值