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

时间:2017-12-22 11:27:27

标签: perl6

> so (Any)
False

但是

> so [1, Any]
True

如何制作False

UPD:这似乎有效,但我不确定它是否正确。

> so [1, Any].all
False

2 个答案:

答案 0 :(得分: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更快地做一些事情。

答案 1 :(得分:2)

如果你想要定义而不是真正的检查,你也可以say [1, 2, Any].all.defined,它将通过交叉点自动读取定义的方法调用。

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