首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何从状态中获得列表并在qore中修改它?

我如何从状态中获得列表并在qore中修改它?
EN

Stack Overflow用户
提问于 2021-01-15 09:16:47
回答 1查看 22关注 0票数 2

我使用ServiceApi::saveStateData({" my -key":some_list});方法将列表保存到我的qorus状态。我想问的是,如何从状态获取列表,并从列表中添加/删除元素并将其放入状态?此外,我还想知道如何加入列表?例如,我想加入some_list下的两个列表,并将其置于状态下?

谢谢你提前帮忙,克莉丝蒂

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-15 12:29:17

列表总是通过引用传递,即使列表有一个“伪类”(就像Qore中的其他基本类型一样),所有的方法都是只读的。

若要更改列表,请使用+=+接合提取运算符、不移位流行运算符。

问:我如何从列表中添加/删除元素?

选项1:使用提取运算符删除元素:

代码语言:javascript
复制
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]

选项2:使用带有范围的删除操作符删除列表中的一个片段:

代码语言:javascript
复制
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]

问:我怎样才能加入名单?

使用+=+连接列表:

代码语言:javascript
复制
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]

注意,要将一个列表作为单个元素添加到另一个列表中,最好使用操作符:

代码语言:javascript
复制
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中的基本类型,因此它们总是通过值传递(从技术上讲,它们是通过引用使用副本上写入语义传递的),而列表的“伪类” (就像在copy中的所有伪类一样)只实现只读方法;在copy中更新lvalue只使用操作符。这是因为,由于Qore的多线程特性,更新Qore中的lvalue非常复杂。所有的Qore运算符都是线程原子的,只有在保证一致性和原子性的操作符下才能改变lvalue,即使在复杂表达式中也是如此。

上述情况的例外是对象,对象总是通过引用传递(实际上技术上是引用的副本,类似于Java);所有其他值类型都是通过值传递的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65733349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档