当前位置: 首页 > 知识库问答 >
问题:

Perl 6中嵌套列表的赋值

胡国兴
2023-03-14

我想,结果应该是1、2、3。

> my ($a, $b, $c)
> (($a, $b), $c) = ((1, 2), 3)
(((1 2) 3) (Any))
> $a, $b, $c
((1 2) 3 (Any))

这里怎么了?

共有3个答案

夏侯航
2023-03-14

你在问“这里出了什么问题”,我想说的是,单参数规则的一些变体正在发挥作用。因为括号在这里只用于分组,所以发生的是这个赋值

($a, $b), $c = (1, 2), 3

(1,2),3表现为单个参数,因此它们被含糊地分配给组中的第一个元素,$a,$b。因此,他们得到了全部,而波尔·奥尔德(por old)$c只得到了一部分。这样看:

my ($a, $b, $c); 
($a, ($b, $c)) = ((1, 2), 3, 'þ'); 
say $a, $c; # OUTPUT: «(1 2)þ␤»

您可能想看看Larry Wall的这段代码,它使用"=",它完全符合您的要求。它没有记录,所以您可能需要等待一段时间才能完成。

牧宁
2023-03-14

如果您想让结果为1,2,3,则必须Slip列表:

my ($a, $b, $c) = |(1, 2), 3;

这是单参数规则的结果:https://docs.raku.org/type/Signature#Single_Argument_Rule_Slurpy

这也是为什么它会起作用:

my ($a, $b, $c) = (1, 2, 3);

尽管(1,2,3)是一个包含3个元素的列表,但由于相同的单参数规则,它将自动滑动。当然,您也可以删除(迷信的)括号:

my ($a, $b, $c) = 1, 2, 3;
黄毅
2023-03-14

没有什么错(也就是说,P6中的普通作业是按它所做的那样设计的),但您猜测,如果将两侧的结构设置为相同的,则会导致a美元获得1美元,b美元获得2美元,c美元获得3美元。

为此,您需要“绑定赋值”(又名“绑定”),而不是普通赋值:

my ($a, $b, $c);
:(($a, $b), $c) := ((1, 2), 3);

请注意左侧列表前的冒号,使其成为签名文字,并注意左侧列表前的冒号,使其成为绑定操作。

 类似资料:
  • 问题内容: 试图了解如何在Firebase中实现嵌套列表。 可以解决的问题:1-to-N消息传递系统,对于每个消息,您希望维护一个已接收和阅读该消息的用户列表。 阅读了“ Firebase中阵列的最佳实践”。尝试避免使用数组,因为我要同时进行写操作,而在这里看来它们并不是一个好选择。 当前试图通过在每个消息下存储子树来实现此目的,每个子树是已接收,读取或以其他方式对消息 Y 执行某些操作 X 的用

  • 问题内容: 谁能告诉我如何在嵌套列表中调用索引? 通常我只写: 但是如果我有一个带有嵌套列表的列表,如下所示: 我想分别浏览每个索引? 问题答案: 如果您确实需要索引,则可以按照内部列表再次执行以下操作: 但是遍历列表本身是更pythonic的: 如果您确实需要索引,也可以使用:

  • 本文向大家介绍Markdown 嵌套列表,包括了Markdown 嵌套列表的使用技巧和注意事项,需要的朋友参考一下 示例 列表可以嵌套 八个空间 十二个空格 四个空间 然后回来

  • 我有一个有趣的两难处境: 我有一门课,假设它叫做文件柜。 FileCabinet存储文件的链接列表,称为“filesInCabinet”。 在每个文件中,还有另一个文件链接列表,称为“relatedFiles”。 所以它看起来像这样,例如: 文件柜1 文件1 文件3 文件3 文件1 文件2 文件2 我遇到的问题是,嵌套列表(“relatedFiles”)包含文件的单独实例,因此实际上更像: 文件柜

  • 问题内容: 我该如何打开一个列表,例如: 进入列表列表,例如: 即我想将有序元素分组在列表中,并将其保留在有序列表中。我怎样才能做到这一点? 谢谢 问题答案: 假设data_list的长度是三的倍数

  • 问题内容: 我试图在一个内部列表中使用外部列表理解的值: 但是不幸的是,这会引发NameError,因为名称是未知的(尽管外部列表理解指定了该名称)。 这是Python的局限性(尝试过2.7.3和3.2.3)还是有充分的理由解释为什么它不起作用? 是否有计划摆脱限制? 是否有解决方法(可能我没有弄清楚一些不同的语法)来实现我想要的? 问题答案: 您在谈论列表 推导 ,而不是生成器表达式。 您需要交