2017-12-22 13 views

答えて

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にリスト(この文脈ではArrayまたはListを意味小文字のリスト)を得たとき、それは、リスト内の要素の数がかかります

:-)オレンジとリンゴを比較している。そのように、すべてのリストをTrueを与えます。

あなたの質問に答えるには、それを行う方法はたくさんありますが、すべてリストの少なくとも一部を歩く必要があります。あなたのリストが0または空の文字列が含まれていないことが確実な場合は、ような単純な何かができる:

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

[&&]基本的に言っている:1 && Any && 31 && 2 && 3

あなたはそれを確認することができない場合は、追加のステップを行う必要があります:.mapはすでになり、この場合には、あなたが、soを行う必要がないこと

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

注意値はTrueまたはFalseです。私は、読者が何かをより速く行うための練習として、.firstを使って残しています。

+0

ありがとうございます!私は 'so 0 == False'を忘れてしまった。 –

+1

実際、修正されました。ありがとう! –

関連する問題