求助: m×n 矩阵生成方式的不同

1、生成 m×n 空矩阵 (嵌套序列) 有两种方式:

m.(n.(null))

[[null]*n]*m

比如,用第一种写法生成 5×5 的 0 矩阵,5.(5.(0)), 如下图所示:

imagepng

再执行 =5.run(A1(~)(~)=~) 赋值操作,给一条对角线赋值,如下所示:

imagepng

可以看到这种写法下,所有结果都是符合预期的。

再来看第二种写法,[[0]*5]*5,如下图所示,没问题,跟预期一样:

imagepng

然后执行赋值操作就不一样了,同样给对角线赋值,=5.run(A4(~)(~)=~),发现整个都被赋值了:

imagepng

恳请大佬们得闲时看看,上述两种嵌套序列有啥不一样?第一种肯定是靠谱的,第二种在其他语言中也是常见的。

2、补充一个问题,二维数组的复制方法,比如 A 是一个二维数组或者嵌套序列,想复制一个副本,然后修改这个副本对源数组不会产生影响。目前 B=A.m(:),这样的复制,修改 B 时 A 也会跟着变化,要写成 B=A.(~.m(:)) 才会深度复制。只能这样写吗?经常会写成 B=A.m(:)。

3、顺便问一下,2025 年 7 月 2 日更新的 esproc-ext.jar 这个包是不是有问题,更新后集算器 (Mac 企业版) 打开报错如下,换成之前的就没问题。但这个包在 win 系统下又不会报错,是不是我哪里搞的有问题。

imagepng