Perl6には等式演算子が爆発的に増えているようです。何=:=
ですか?leg
との違いは何cmp
ですか?またはと?eqv
_===
誰か良い要約がありますか?
=:= 2つのコンテナ(変数または配列またはハッシュのアイテム)がエイリアスされているかどうかをテストします。つまり、一方が変更された場合、もう一方も変更されますか?
my $x;
my @a = 1, 2, 3;
# $x =:= @a[0] is false
$x := @a[0];
# now $x == 1, and $x =:= @a[0] is true
$x = 4;
# now @a is 4, 2, 3
その他については、=== 2つの参照が同じオブジェクトを指しているかどうかをテストし、eqvは2つのものが構造的に同等であるかどうかをテストします。したがって[1, 2, 3] === [1, 2, 3]
、false(同じ配列ではない)に[1, 2, 3] eqv [1, 2, 3]
なりますが、true(同じ構造)になります。
leg
Perl 5のような文字列を比較しますがcmp
、Perl 6cmp
はよりスマートで、のような数値とのような<=>
文字列を比較しますleg
。
13 leg 4 # -1, because 1 is smaller than 4, and leg converts to string
13 cmp 4 # +1, because both are numbers, so use numeric comparison.
最後~~
は「スマートマッチ」で、「マッチするか」という質問に答え$x
ます$y
。がタイプの場合$y
、タイプチェックです。が正規表現の場合$y
、それは正規表現の一致です-など。
Synopsis 3: Comparison Semanticsの要約はあなたが望んでいることですか、それともすでに読んでいましたか? 設計ドキュメントは、これらの機能が使用されているテスト ファイルにリンクしているため、それらの使用例と現在のテスト状態を確認できます。
Perl 6 の比較演算子は、動的言語と進行中のすべてのものにより適しています。文字列や数値を比較する (または文字列や数値に変換する) だけでなく、必要な操作を実行する演算子を使用して正確にテストできるようになりました。値、コンテナー、型などをテストできます。
eqv
コメントの 1 つで、とについて尋ねますcmp
。Perl 5 の昔はcmp
、ソートのために存在し、3 つのマジック値 (-1,0,1) のいずれかを返し、常に文字列セマンティクスでそれを行っていました。Perl 6 では、cmp
3 つのタイプのOrder
オブジェクトのいずれかを返すため、-1、0、または 1 の意味を覚えておく必要はありません。また、新しいcmp
ものは文字列のセマンティクスを強制しないため、数値を渡すとよりスマートになります (1、10、11、2、20、21 のようにソートされる Perl 5 とは異なります)。
(より小さいleg
、等しい、より大きい) は、文字列のセマンティクスを使用します。Perl 6 の として定義されています。では、古い Perl 5 と同じように、常に文字列比較を行っています。cmp
~$a cmp ~$b
~
leg
cmp
他の演算子についてまだ質問がある場合は、それらを個別の質問に分けてみましょう. :)
これも便利なリファレンス ガイドです。