关于函数 modify@n 的一点疑问
大佬们,早上好!
我在学习 modify 函数的时候对 @n 选项返回修改后的值有一点小疑问,如下:
1、序表.modify@n(k, 值 1, 值 2…)
对序表 modify 时,不管序表的位置 k 处是否存在值,都会发生修改或者追加,且 @n 会返回修改后的记录,这个很方便,也没什么问题。
2、序列.modify@n(k, 值)
对序列 modify 时,@n 选项会返回不一样的值,这里的序列是指单层序列,比如数列 3.() 或者文本序列…此处的 @n 选项跟序表.modify@n 执行逻辑不一致,3 种情况:
a、序列的位置 k 超出序列长度,此时 modify@n 返回的是 null,比如,=[].modify@n(2,11),结果返回 null;
b、序列的位置 k 处的值是 null 或者 "",此时 modify@n 返回的是 null 或者"",比如,=[null,""].modify@n(2,11),结果返回"";
c、序列的位置 k 处存在非空值,此时 modify@n 返回的是 k 值,比如,[1,2].modify@n(2,22),结果返回 2
按照官网函数文档里的说明,一些函数的 @n 选项会返回修改后的结果,比如,insert@n,delete@n, 都会返回修改后的结果,但 modify 函数的 @n 选项针对不同的处理对象会有不同的执行逻辑,这一点让人困惑。按照我的理解,序列.modify@n 也应该返回修改后的值,是不是上述第 2 点使用的姿势不对?
恳请大佬有空时帮忙指点解惑,谢谢!
序列.modify@n(k, 值) 返回的是源值
序表.modify() 返回的是修改的记录,记录实际上就是源值
感谢大佬回复!
“序列.modify@n()”,返回的是源值,这说的通。
那么,“序表.modify@n() 返回的是修改的记录,记录实际上就是源值”,这修改的记录是源值,那序列里修改后的源值为啥不是修改的值?
比如 modify 一个空表,=create(a,b).modify@n(2,2,b+=22),返回的是记录 {a:2,b:22},这是修改后的。如果返回的是源值,那此时源是空表,返回的源值应该也是 null,这跟序列.modify@n 返回逻辑不一样啊。
这个是从需求方面做的约定的了,序表的 modify 有针对修改的记录再做计算的需求
谢谢!😄