我正在使用ServiceApi :: saveStateData({“ my-key”:some_list}); 将列表保存到我的qorus IE状态的方法。我想问的是如何从状态中获取列表,以及如何从列表中添加/删除元素并将其放回状态中?我也想知道如何加入名单?例如,我想在some_list下加入两个列表并将其置于状态下?
多谢克里斯蒂预先提供的帮助
列表始终通过引用传递,即使列表具有“伪类”(与Qore中的其他基本类型一样),所有方法也是只读的。
要更改列表,请使用+ =,+,push,splice,extract运算符,unshift和pop运算符。
prompt$: qore -ne 'list<auto> l = (1, 2, 3, 4); printf("removed: %y\n", (extract l, 1, 2)); printf("l: %y\n", l);'
removed: [2, 3]
l: [1, 4]
prompt$ qore -ne 'list<auto> l = (1, 2, 3, 4); printf("removed: %y\n", remove l[1..2]); printf("l: %y\n", l);'
removed: [2, 3]
l: [1, 4]
prompt$ qore -ne 'list<auto> l1 = (1, 2); list<auto> l2 = (3, 4); printf("new list: %y\n", l1 + l2);'
new list: [1, 2, 3, 4]
prompt$ qore -ne 'list<auto> l1 = (1, 2); list<auto> l2 = (3, 4); l1 += l2; printf("new list: %y\n", l1);'
new list: [1, 2, 3, 4]
请注意,要将列表作为单个元素添加到另一个列表,最好使用push运算符:
qore -ne 'list<auto> l1 += (1, 2); list<auto> l2 = (3, 4); push l1, l2; printf("new list: %y\n", l1);'
new list: [1, 2, [3, 4]]
请注意,我+=
在上面的原始分配中使用以确保l1
具有类型list<auto>
-作为简单分配将导致list<int>
导致push
表达式引发异常。
还要注意,因为列表是Qore中的基本类型,所以它们始终按值传递(从技术上讲,它们是使用写时复制语义通过引用传递的),以及列表的“伪类”(与Query中的所有伪类一样) Qore)仅实现只读方法;在Qore中更新左值只能由运算符完成。这是因为由于Qore的多线程特性,在Qore中更新左值很复杂。所有Qore运算符都是线程原子的,并且只能使用即使在复杂表达式中也能保证一致性和原子性的运算符才能更改lvalue。
上面的例外是对象中的对象,这些对象总是通过引用传递的(实际上在技术上带有引用的副本,类似于Java)。所有其他值类型均按值传递。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句