如何解决为什么集合的行为似乎有所不同?
在下面的示例中,在集合B上调用.add()方法时,集合A也受到影响:
A = {0,1,3,4,5}
B = A
B.add(10)
我之所以这样是因为A和B都指向同一个集合对象。
但是,在这种稍有不同的情况下,集合A不受影响:
A = {0,5}
B = A
B = B - {0,1}
在第二个示例中,为什么要创建一个新对象供B指向?是什么解释了这种行为差异?
解决方法
关于第一种情况,您绝对正确-const commandFiles = readdirSync(join(__dirname,"commands")).filter((file) => file.endsWith(".js"));
for (const file of commandFiles) {
const command = require(join(__dirname,"commands",`${file}`));
client.commands.set(command.name,command);
}
和A
是同一对象。
对于第二个示例,表达式B
正在创建一个新集合。该新集合将被分配回B - {0,1}
,所以现在B
与B
不再相同。
在第一种情况下,是的,A
和B
是同一对象的别名,因此在两个别名上都可以看到通过一个别名进行的变异。
在第二种情况下,B - {0,1}
正在创建一个全新的set
对象,而B =
是重新绑定名称B
的对象(任何每当您看到plainname = somethingelse
时,绑定到plainname
的对象都无所谓;现在又反弹到新的东西),因此它不再是与A
相同的集合的别名。您可以执行以下操作来将B
进行适当的突变,从而使A
也发生变化:
B -= {0,1}
由于set
实现了变异的就地减法运算,该运算为-=
(而不是-
)调用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。