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

Eug*_*sky 3 perl6

> so (Any)
False
Run Code Online (Sandbox Code Playgroud)

> so [1, Any]
True
Run Code Online (Sandbox Code Playgroud)

如何制作False

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

> so [1, Any].all
False
Run Code Online (Sandbox Code Playgroud)

Eli*_*sen 6

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

当您给出so一个列表(小写列表表示一个ArrayList在此上下文中)时,它将占用列表中的元素数:所以每个至少包含一个元素的列表将给出True.

要回答你的问题,有很多方法可以做到这一点,但所有这些方法都需要至少部分行走.如果您确定列表中不包含0空字符串,则可以执行以下操作:

say so [&&] (1,Any,3); # False
say so [&&] (1,2,3);   # True
Run Code Online (Sandbox Code Playgroud)

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

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

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

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