V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qdwang
V2EX  ›  Apple

苹果现在 bug 越来越多的原因找到了

  •  
  •   qdwang · 4 天前 · 12038 次点击

    这里大家都是程序员,只要做完这个题,就知道为什么苹果会有那么多 bug 了

    // 这是一段 swift 代码
    
    var hello = [10, 20, 30, 40, 50, 60]
    var foo = hello[2..<5] // 表示索引范围是 2 ,3 ,4
    foo[2] = 0
    print(foo) 
    
    // 先看看你的程序员直觉,输出结果是什么
    
    

    然后随便 google 找个 swift playground 运行这段代码,你就知道为什么苹果现在 bug 越来越多了。

    109 条回复    2025-10-28 18:48:00 +08:00
    1  2  
    liuhan907
        101
    liuhan907  
       2 天前
    @volvo007 这里的问题核心不是修改了原数组,而是新切片的索引任然遵循的是原数组的索引
    Torpedo
        102
    Torpedo  
       2 天前
    @june4 #94 一般最好都用 null 。undefined json 不支持 。而且 undefined 容易和 {xxxx?:number} 混淆
    freedomin
        103
    freedomin  
       2 天前
    结果要是[20, 0, 40]我还勉强能理解,[0, 40, 50]我是真理解不了
    june4
        104
    june4  
       2 天前
    @Torpedo 相反,一般只用 undefined 比较好。ts 官方团队也是推荐只用 undefined 。
    volvo007
        105
    volvo007  
       2 天前 via iPhone
    volvo007
        106
    volvo007  
       2 天前 via iPhone
    @XIVN1987 我 py 白学了😂,你是对的。哪个语言会两边都改来着? go ?我试了下 np 下切片和原数组是一样的,当然这是另一种实现了

    >>> a = np.arange(0,100,10)
    >>> a
    array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
    >>> b = a[4:7]
    >>> b
    array([40, 50, 60])
    >>> b[0] = 0
    >>> b
    array([ 0, 50, 60])
    >>> a
    array([ 0, 10, 20, 30, 0, 50, 60, 70, 80, 90])
    volvo007
        107
    volvo007  
       2 天前 via iPhone
    @liuhan907 🤦还真没注意,那岂不是说如果切片比较长,我还要自己算偏移量……有点难绷
    HtPM
        108
    HtPM  
       2 天前
    其实并不反直觉,这是底层性能优化而已,数组赋值肯定是赋值的底层指针(引用)呀,不管是 java ,c 还是 c++,这都是默认行为。如果按照你的直觉:所有对象赋值都是新建一份内存然后深拷贝,那栈不得爆了?虽然我对 swift 的语法没你那么熟,但语言都是相通的。
    Torpedo
        109
    Torpedo  
       2 天前
    @june4 #104 为什么呢
    1  2  
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1383 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:59 · PVG 00:59 · LAX 09:59 · JFK 12:59
    ♥ Do have faith in what you're doing.