如何检查数组的所有元素是否在Perl 6中定义?

问题描述 投票:3回答:2
> so (Any)
False

> so [1, Any]
True

如何使它生产False

UPD:这似乎有效,但我不确定这是正确的方法。

> so [1, Any].all
False
perl6
2个回答
2
投票

如果你想要定义而不是真实性检查,你也可以使用say [1, 2, Any].all.defined,它会在结点上自动读取定义的方法调用。

say [1, 2, True].all.defined   # True
say [1, Int, True].all.defined # False

6
投票

首先,(Any)不是List(Any,)是(注意逗号)。您应该将第一个案例设为数组(如[Any])。否则你将苹果与橙子进行比较:-)

当你给so一个列表(小写列表意味着ArrayList在这个上下文中)时,它将占用列表中的元素数量:所以每个至少有一个元素的列表将给出True。

要回答你的问题,有很多方法可以做到这一点,但所有这些方法都需要至少部分行走。如果你确定你的列表不包含0或空字符串,你可以做一些简单的事情:

say so [&&] (1,Any,3); # False
say so [&&] (1,2,3);   # True

[&&]基本上是在说:1 && Any && 31 && 2 && 3

如果你不能确定,那么你将不得不做一个额外的步骤:

say [&&] (1,Any,3).map: *.defined; # False
say [&&] (1,0,3).map: *.defined;   # True

请注意,在这种情况下,您不必执行so,因为.map已经使值为TrueFalse。我将它作为练习让读者用.first做更快的事情。

© www.soinside.com 2019 - 2024. All rights reserved.