> so (Any)
False
但是
> so [1, Any]
True
如何制作False
?
UPD:这似乎有效,但我不确定它是否正确。
> so [1, Any].all
False
答案 0 :(得分:6)
首先,(Any)
不一个List
,(Any,)
(请注意逗号)。您应该将第一个案例设为数组(如[Any]
)。否则,你将苹果与橙子进行比较: - )
当您为so
提供一个列表(小写列表在此上下文中表示Array
或List
)时,它将占用列表中的元素数:所以每个列表都是至少有一个元素,将给予True。
要回答您的问题,有很多方法可以做到这一点,但所有这些方法都需要至少部分行走。如果您确定列表中不包含0
或空字符串,则可以执行以下操作:
say so [&&] (1,Any,3); # False
say so [&&] (1,2,3); # True
[&&]
基本上是说:1 && Any && 3
和1 && 2 && 3
。
如果你不能确定,那么你将不得不做一个额外的步骤:
say [&&] (1,Any,3).map: *.defined; # False
say [&&] (1,0,3).map: *.defined; # True
请注意,在这种情况下,您不必执行so
,因为.map
已经使值True
或False
。我将其作为练习让读者使用.first
更快地做一些事情。
答案 1 :(得分:2)
如果你想要定义而不是真正的检查,你也可以say [1, 2, Any].all.defined
,它将通过交叉点自动读取定义的方法调用。
say [1, 2, True].all.defined # True
say [1, Int, True].all.defined # False