42

Perl6には等式演算子が爆発的に増えているようです。何=:=ですか?legとの違いは何cmpですか?またはと?eqv_===

誰か良い要約がありますか?

4

3 に答える 3

44

=:= 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(同じ構造)になります。

legPerl 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、それは正規表現の一致です-など。

于 2008-10-06T22:00:15.197 に答える
19

Synopsis 3: Comparison Semanticsの要約はあなたが望んでいることですか、それともすでに読んでいましたか? 設計ドキュメントは、これらの機能が使用されているテスト ファイルにリンクしているため、それらの使用例と現在のテスト状態を確認できます。

Perl 6 の比較演算子は、動的言語と進行中のすべてのものにより適しています。文字列や数値を比較する (または文字列や数値に変換する) だけでなく、必要な操作を実行する演算子を使用して正確にテストできるようになりました。値、コンテナー、型などをテストできます。

eqvコメントの 1 つで、とについて尋ねますcmp。Perl 5 の昔はcmp、ソートのために存在し、3 つのマジック値 (-1,0,1) のいずれかを返し、常に文字列セマンティクスでそれを行っていました。Perl 6 では、cmp3 つのタイプのOrderオブジェクトのいずれかを返すため、-1、0、または 1 の意味を覚えておく必要はありません。また、新しいcmpものは文字列のセマンティクスを強制しないため、数値を渡すとよりスマートになります (1、10、11、2、20、21 のようにソートされる Perl 5 とは異なります)。

(より小さいleg、等しい、より大きい) は、文字列のセマンティクスを使用します。Perl 6 の として定義されています。では、古い Perl 5 と同じように、常に文字列比較を行っています。cmp~$a cmp ~$b~legcmp

他の演算子についてまだ質問がある場合は、それらを個別の質問に分けてみましょう. :)

于 2008-10-07T05:24:36.830 に答える
3

これも便利なリファレンス ガイドです。

Perl6 演算子の周期表

于 2010-04-14T14:47:21.020 に答える