これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 10 - Containers and Valuesの日本語訳です。
原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。
本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。
Original text: Copyright© 2008-2010 Moritz Lenz
Japanese translation: Copyright© 2011 SATOH Koichi
NAME
"Perl 5 to 6" Lesson 10 - コンテナと値
SYNOPSIS
my ($x, $y);
$x := $y;
$y = 4;
say $x; # 4
if $x =:= $y {
say '$x and $y are different names for the same thing'
}
DESCRIPTION
Perl6はコンテナと、コンテナに格納できる値を区別して取り扱います。
通常のスカラ変数は一種のコンテナで、型制約やアクセス制約(読み取り専用とか)などの属性を持ち、他のコンテナの別名として使えます。
値をコンテナに格納することを代入と呼び、コンテナに別名をつけることをバインディングと呼びます。
my @a = 1, 2, 3;
my Int $x = 4;
@a[0] := $x; # @a[0]と$xは同じ変数
@a[0] = 'Foo'; # エラー 「型チェック失敗」
Int
やStr
のような型は不変、つまりこれらの型のオブジェクトは変更できません。しかしこれらの値を保持する変数(コンテナ)は変更できます:
my $a = 1;
$a = 2; # 驚くにはあたりません
バインディングは::=
演算子を使ってコンパイル時に行うこともできます。
2つの変数がバインディングされているか調べるには=:=
比較演算子を使います。
MOTIVATION
サブルーチンや型、変数のエクスポートやインポートは別名定義によって実現されます。 ややこしい点のある型グロブによる別名定義マジックに代わって、Perl6はシンプルな演算子を提供します。
SEE ALSO
http://perlcabal.org/syn/S03.html#Item_assignment_precedence
コメント
コメントを投稿