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

2 天前
 qdwang

这里大家都是程序员,只要做完这个题,就知道为什么苹果会有那么多 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 越来越多了。

11770 次点击
所在节点    Apple
109 条回复
Torpedo
2 天前
@june4 #14 这两个可以不分的。主流库里,常见的只有 react 组件的返回和 json 严格区分了这两个。js 判断 null 和 undefined 如果不分,直接用 a!=null 判断就行了
idonttellyou
2 天前
为什么不是[30, 40, 0]呢...
V2Try
2 天前
这个确实奇怪,如果
foo[2] = 0
换成
hello[2] = 0

结果是不是一样的?
Wanex
2 天前
先别管 swift 符不符合直觉,也别管 js 有没有同样的问题,总之先骂 js 再说🤣
november
2 天前
@cpstar 其实 #27 的答案是 ai 结果,实际运行结果是 hello 没变。
所以更验证了楼主说的“一堆 ai 回答错”。233333
ChrisFreeMan
2 天前
@idonttellyou 因为很多人理所当然的认为 foo 是拷贝了一个新的数组,实际上 foo[2]指向了原来的数组,foo 只是引用了愿数组 hello 。
ufan0
2 天前
@junj2121 以此举例不大合适吧,C 有明确的指针概念,甚至初学者都会接触到。
PlG5sBkXD1ziLeGB
2 天前
@ChrisFreeMan #46 按照你的说法,foo[2]指向原来的数组,那修改 foo[2]后原来的数组是不是应该改变呢
Huelse
2 天前
确实反直觉
beimenjun
2 天前
这个并不是苹果现在 bug 越来越多的原因。

我还以为是讲技术债之类的,结果居然是吐槽 Swift 的语法。真的是浪费时间。
ChrisFreeMan
2 天前
@idonttellyou 好吧,我搞错了,自己试了下,原数组并没有改变值
ChrisFreeMan
2 天前
@PlG5sBkXD1ziLeGB 我刚刚试了下确实是,没有改变,我收回我的傻逼言论
lihanst
2 天前
看到这种结果,应该思考为什么要设计一个 ArraySlice ?目的是什么?代价是什么?
VXF2016
2 天前
真离谱
caiqichang
2 天前
确实反直觉
usVexMownCzar
2 天前
没啥好吵的,swift 的 Array 并不是传统概念的数组,真正的数组(连续存储)是最近版本才添加的,InlineArray 。

话说目前还没看到从源代码来分析上面的代码为什么这么设计🌚
mizuki9
2 天前
好奇葩的设计,好奇葩的行为
luodan
2 天前
学习了。以后遇到 slice 多留意点。
FlashEcho
2 天前
@junj2121 #39 c 根本就没有数组切片,得自己手写,天然就会知道这个是一个视图还是拷贝出来一个新的,不参与讨论。c++的数组拷贝是默认拷贝出来一个新的
whitefable
2 天前
@junj2121 #39 即使是 C 出身也很反直觉好吧。 要说从指针赋值上去考虑,那 foo 不应该也是指向了 hello[2]么,那此时 foo[2]也是对应 hello[4]才对

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1168491

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX