memberModify!
语法
memberModify!(obj, function, indices, parameters)
详情
修改元组或 ANY 字典的成员对象,也可修改面向对象的编程(OOP)中的对象。
参数
obj 一个元组或值为 ANY 类型的字典,或者一个 OOP 对象。
function一个内置的系统函数,该函数的第一个参数是可修改的,例如 append!。
indices 标量、向量或元组,表示指向一个或多个成员对象的索引或键值。
-
若是一个元组,用于表示多维度索引。元组的长度表示索引的深度。
-
若是一个向量,表示对多个成员进行修改。
parameters function 除第一个参数外的其它参数。parameters 的维度必须与 indices, function 的参数个数匹配。
例子
例 1
创建元组 a,修改其中的一个元素,可见前后对比。
a = (1 2, 3 4 5)
memberModify!(a, append!, 0, 3 4)
a
//output: a = (1 2 3 4, 3 4 5)
创建字典
d,修改其中的两个元素,可见前后对比。
d = dict(`A`B`C, (1 2, 3 4, 5 6))
d
/*output:
A->[1,2]
B->[3,4]
C->[5,6]
*/
d.memberModify!(append!,`A`B, 3 4)
d
/*output:
A->[1,2,3]
B->[3,4,4]
C->[5,6]
*/
创建元组 c,其包含基于表 t,字典 d
和一个元组。
t = table(1 2 3 as val1, 4 5 6 as val2)
d = dict(`A`B`C, (1 2, 3 4, 5 6))
c = (t, d, [1 2 3, 4 5 6])
c
/*output:
(val1 val2
---- ----
1 4
2 5
3 6
,C->[5,6]
A->[1,2]
B->[3,4]
,([1,2,3],[4,5,6]))
*/
调用
memberModify!
对元组第 3 个元素 [1 2 3, 4 5 6]
的第 1
个元素 [1, 2, 3] 添加元素 4 和 5。要修改的对象需要用两个维度来指定,因此 indices 使用元组 (2, 0)
来表示。c.memberModify!(append!, (2, 0), 4 5)
/*output:
(val1 val2
---- ----
1 4
2 5
3 6
,C->[5,6]
A->[1,2]
B->[3,4]
,([1,2,3,4,5],[4,5,6]))
*/
在该基础上,继续向元组的第 2 个元素(字典)的键值 B 指定的对象写入新数据 5 和 7。indices 仍然使用元组 (1,`B)
来表示。
c.memberModify!(append!, (1,`B), 5 7)
c
/*output:
(val1 val2
---- ----
1 4
2 5
3 6
,C->[5,6]
A->[1,2]
B->[3,4,5,7]
,([1,2,3,4,5],[4,5,6]))
*/
例 2
约定名为 A 的类并进行实例化,使用 memberModify!
进行写入操作,打印向量 a 的数据,可得预期结果。
class A {
a :: INT VECTOR
def A() {
a = []
}
}
v = A()
memberModify!(v, append!, "a", 1)
print v.a
//output: [1]
memberModify!(v, append!, "a", 11)
print v.a
//output: [1,11]