Bash 后置自增的退出状态:变量已经加一,为什么条件却走进失败分支 计数器从零开始,执行 ((n++)) 后确实变成一,但紧接着检查退出状态却是 一。若把它写在条件里,会走进 else。这里一并不说明自增没发生:算术命令用表达式的值决定真假,而后置自增表达式交出的是修改之前的值。下面... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Bash mapfile 的显式起点:同样从零写入,为什么旧数组尾部有时还在 一段脚本读取新清单时只收到一行,旧数组有三项。普通 mapfile 执行后只剩新的一项;为了把起点写清楚,加上 -O 0,尾部两项反而留下了。起点数字虽然相同,“是否显式指定起点”还会决定读取前是否清空数组。下面使用... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript concat 展开谁:Set 可以遍历,为什么合并后仍然只占一项 Set 明明能用于 for...of,也能通过展开语法得到两个值,可是传给 concat 后,结果数组只有一个元素。可迭代不等于 concat 会逐项合并;这两个操作使用不同协议,不能只凭集合“里面有多项”判断输出。... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript Math.round 的负半数:1.5 变成 2,为什么 -1.5 却变成 -1 把偏移量舍入到整数格点时,正的一点五得到二,负的一点五却得到负一。如果预期正负两侧保持对称,这个结果会显得奇怪。Math.round 在两侧距离相等时选择更接近正无穷的整数,因此负半数也向数轴右边走。先分清两个阶段:... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Python ISO 周编号年份:日期还是十二月,为什么已经属于下一年的第一周 周报用日期的 year 加上 isocalendar 得到的周号作为分组键,到了年末突然把同一周拆开。2024年12月30日的公历年份是2024,它的ISO周编号年份却是2025。把两套年份与周号混拼,得到的标签可能... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python asyncio.wait 超时:等待已经返回,为什么任务稍后仍然完成了 后台任务被交给 asyncio.wait,并设置等待超时。调用方已经拿到返回值,过一会儿却发现任务仍更新了结果。wait 的超时结束的是这一次等待,不会自动取消尚未完成的任务,也不会因此抛出 TimeoutError... yunqueblog/ 技术教程/ 2026-10-02/ 4 阅读
Python combinations 的位置身份:输入只有两种字母,为什么同一对结果会出现两次 从 A、A、B 中取两个元素,combinations 会交出一次 AA 和两次 AB。看到重复 AB 后直接认定库函数没有去重,会漏掉问题本身:两个 A 位于不同位置,可以代表两张独立卡片,也可以代表同一个类别的重... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python range 的长度上限:远处的元素能取到,为什么 len 却抛出溢出异常 程序用 range 表示很大的连续编号空间,创建成功,索引也能取值;加入一行 len 作进度统计,却触发 OverflowError。这并不意味着编号超出了 Python 整数能力,而是序列项数超过了 CPython... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript lastIndexOf 的负位置:已经退到开头之前,为什么仍然找到零 从右向左寻找斜杠,每找到一次就把位置减一,看起来已经保证循环前进。可是当字符串开头也是斜杠时,程序可能一直得到零。关键是 String.lastIndexOf 对负 position 不表示“开头以前没有位置”,而是... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript TypedArray 截取:只剩两项,为什么 buffer 仍然带着整段数据 解析一段二进制数据时,用 subarray 取出中间两字节,再把它的 buffer 交给下一层,结果下一层又看到头尾的额外字节。视图范围变小,不代表底层缓冲区也被裁短;只传 buffer 会丢掉窗口边界。下面使用普通... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读