それで、最初の投稿として、私は自分の知識を共有することにしました:素材の作者は通常、独立した「研究」のために何を残しますか-「何が起こるか...」または「それは言語で何を意味するのか?」 「。
この記事では、この言語の基本的なデータ型について説明し、コンテキストの問題に部分的に対処します。これは、Perl言語の主要な機能の1つです。
変数のタイプと可能な値のタイプ。
Perl6には、スカラー、配列、ハッシュという3つの主要な変数タイプがあります。
変数を宣言するには、myキーワード-ローカル変数の宣言、-を使用してグローバル変数を宣言します(変数を宣言する方法はこれだけではありませんが、今のところ、それで十分です)。
- スカラー。
スカラーは、数値、文字列、ブール値、リンクなどの単一の値を含むことができる変数です。
スカラー変数は、「$」記号を使用して宣言されます。 変数a、b、およびcは、それぞれ$ a、$ b、および$ cとして宣言されます。 また、変数は値ですぐに初期化できます。
例えば
my $scalarVar; my ($var1, $var2, $var3); my $newStr = " "; my $bigNumber = 192958238719732641028368452872938741029834612983412038471293847123641892364; my ($a, $b, $c) = 1, 2, 3; my ($a, $b, $c) = (1, 2, 3);
宣言中に変数に1つの型の値(数値など)が割り当てられた場合、いつでも文字列またはその他のデータ型を変数に割り当てることができます。
例えば
my $scalarVar; $scalarVar = ''; $scalarVar = 25; $scalarVar = True;
基本データ型:
- 整数
整数は、Int()型で表されます。 桁数による数がInt()型の最大桁数を超える場合、自動的にNum()型に変換されます。これは、丸めることなく任意の長さの整数を保持できます(実験のために、私はいくつかの長さを得たため、 30万桁)。 大きすぎる数字を書くには、「_」文字を使用して数字の複数の数字を視覚的に区切ることができます。 たとえば1_000_000, 1_0_0_0; 1_00_0
1_000_000, 1_0_0_0; 1_00_0
、ただし、最後の2つのオプションを使用しない方が良いです。
- 小数
分数は、値に応じてタイプRat()またはNum()で表されます。 番号は42.01, 10e-5
形式にすることができます。 変数の割り当てが長すぎると、perl6は小数部分を切り捨てることができますが、長さに関わらず全体を変更せずに保持します(繰り返しますが、これについてはわかりませんが、私の実験ではそうなることが示唆されています)。 計算の結果が非常に大きな小数である場合、結果はInfの値として返されます。これはNum()型の値です。
- 行
文字列は、単一引用符( ')または二重( ")に制限された任意のuncode-charactersのセットです。最初のケースでは、変数と特殊文字(\ n、\ tなど)の置換はありません)。行が'f \n 1'
と記述されている場合、これらの文字はすべて出力時に変更されずに表示されます。"f \n 1"
と記述すると、画面に「f f」と「1」行の2行が表示されます。
'\ n'これは改行文字です。
- ブール値
これらはTrueとFalse(大文字で必須!)、タイプBool()です。
- 参照資料
このタイプの変数は、既存のオブジェクトを示します。 リンクを使用すると、オブジェクト自体が指すのとまったく同じアクションを実行できます(たとえば、配列要素へのアクセス)。
最も重要なこと:
$a = 10; $b = \$a;
この場合、変数$ bには変数$ aへの参照が割り当てられます。 変数$ bの値を表示すると、リンクは自動的に変数$ aの値を取得しますが、変数$ bに新しい値が割り当てられると、$b=5;
次に、変数$ a自体ではなく、変数$ aを参照する代わりに、値5が書き込まれます。 つまり これで、$ bにはリンクが含まれず、数字のみが含まれます。
- キーと値のペア
このタイプの名前はPair()です。 ペアのコンストラクターは「=>」です。 たとえば、(1=>'a')
はペアを作成します。キーは1で、このキーの値は 'a'です。 さらに、可能なキー値は文字列であり(この場合、1は自動的に文字列型にキャストされます)、任意のスカラーはキーごとの値になります。
- 整数
- 配列
Perl6では、配列は動的です。つまり、 初期化されるとき、最大サイズを指定する必要はありません。 新しいアイテムが追加されると、メモリが割り当てられます。 配列の要素は、任意のスカラーとスカラー変数です。 配列では、要素のインデックスは宣言時の位置に依存します。 配列コンストラクターはコンマです。 たとえば、式('a', 502, "str")
はサイズ3の要素の配列を構成します(括弧はオプションです)。 要素のインデックスはゼロから始まります。 つまり 配列のゼロ要素は 'a'で、インデックス1の下では数値502、インデックス2の下では "str"です。 スカラーのタイプは同じである必要はありません。 配列参照を生成するには、角括弧を使用します。 たとえば、['a', 502, "str"]
は、スカラー変数に割り当てることができる新しい配列への参照を返します。
配列名は、文字「@」で始まる必要があります。 例えば@mass, @colors, @names
@names
名は異なる変数です。
配列には、さまざまなタイプの要素をいくつでも含めることができます。
使用例:
@arr = ('a', 502, "str"); @arr2 = (10, False, True, $scalarVar);
配列の要素を参照するには、角括弧を使用します。
たとえば、式@ arr2 [0]は10を返し、@ arr2 [3]は$ scalarVar変数ではなく、配列の作成時の値を返します。 $ scalarVar変数の値を取得するには、配列への書き込みにこの変数へのリンクが必要です。@arr2 = (10, False, True, \$scalarVar);
配列の初期サイズが2の場合:@arr = (1, 2);
インデックス5(たとえば、 arr [5] = 'new elem')の下の要素の値を設定したい場合、配列は6個の要素に拡張され、 arr [5]を除くすべての追加要素は初期化されません(この値の型はAny()です)。
- ハッシュ
ハッシュは、各キーに応じて単一の値が割り当てられている場合の対応表です。 ハッシュ要素の値は任意のスカラーであり、キーは文字列です。
ハッシュ名は文字「%」で始まる必要があります。
my %hash = ('key1'=>'value1', '2'=>200, 'key10'=>True);
ハッシュに配列を割り当てると、配列の要素がハッシュ要素をペアで構成します。
my @mas = ('a, 1, 'b', 2); my %hash = @mas;
この結果、%ハッシュ変数が格納されます( 'a' => 1、 'b' => 2);
ハッシュ要素にアクセスするには、中括弧を使用します。
%hash{'a'} = 'new value';
新しいハッシュ要素を追加するには、新しいキーで値を割り当てるだけです:
%hash{'new elem'} = 255;
キーとして数字を使用する場合
%hash{1000} = 20;
数値は文字列に変換されるため、ハッシュにすでにキー「1000」を持つ要素がある場合、数値キーで値を入力すると、既存の値が上書きされます。
ハッシュはペアから構築することもできます:
$a = ('a'=>1); $b = ('b'=>2); %hash = $a, $b, 'c'=>3;
コンテキスト
次に、コンテキストに目を向けます。
Perl 6はコンテキスト依存です。つまり、変数を使用するためのさまざまな条件下で、さまざまな値が返される場合があります。 まず、コンテキストは、どの変数に値が割り当てられるかによって決まります。
$ a = ...-スカラーコンテキストを設定し、@ a = ...はリストコンテキストを設定します。
次のコンテキストを使用できます。
- スカラーコンテキスト
スカラーコンテキストは$()構造を使用して定義されます。式は角括弧内に指定され、その結果はスカラーコンテキストで解釈されます。
配列自体ではなく、スカラーコンテキストで配列を使用する場合、指定された配列への参照が返されます。これは既に配列の名前として使用できます(たとえば、操作を使用して配列要素を取得します)。
スカラーコンテキストでハッシュを使用すると、ハッシュ参照が返されます。
より具体的なタイプのコンテキストは次のとおりです。
- 数値コンテキスト
数値コンテキストは、+()構造を使用して指定されます。 このコンテキストで解釈された式の結果が数値結果ではない場合、数値型が変換され、変換の結果としてエラーが発生した場合、スクリプトは動作を停止します。
- 文字列コンテキスト
文字列コンテキストは、〜()構造を使用して指定されます。 通常、任意の値を文字列型にキャストできるため、このコンテキストの問題は想定されていません
- 論理コンテキスト
論理コンテキストは、?()構成を使用して設定されます。 結果は、論理型へのキャストのルールに従って発行されます。
- 数値コンテキスト
- リストコンテキスト
リストコンテキストは、@()構造を使用して定義されます。 配列を作成する例:
@a1 = (1, 2); @a2 = (3, 4); @a3 = (5, 6);
ただし、次の行を書く場合
@b = (@a1, @a2, @a3);
その後、結果として、(1, 2, 3, 4, 5, 6)
1、2、3、4、5、6)のように見える1次元配列@bを取得し、([1, 2], [3, 4], [5, 6])
ように見える2次元配列ではありません([1, 2], [3, 4], [5, 6])
。 リストコンテキストは、すべての配列とそれに転送されたハッシュを1つの大きな配列にマージすることがわかります。 多次元配列を取得するには、配列自体ではなく、コンストラクターへの参照をコンストラクターに渡す必要があります。
@b = (\@a1, \@a2, \@a3)
リストコンテキストでスカラー値が使用されている場合、結果はこのスカラーで構成されるシングルトン配列になります。
リストコンテキストでハッシュが使用されている場合、ハッシュのすべてのキーと値はペアで配列にコピーされます。
%a = (1=>'a', 2=>'b'); @a = %a; # (1, 'a', 2, 'b')
式(1, 2)
の結果が式[1, 2]
の結果とどのように異なるかを混同しないようにすることが重要[1, 2]
。
最初の場合、配列が取得されます。 それをスカラー変数$ a =(1、2)に割り当てると、最終的にこの変数は配列への参照を持ちます; @a =(1、2)と書くと、@ aは2つの要素の配列になります。
2番目のケースでは、$ a = [1、2]には配列への参照も含まれますが、@ a = [1、2]変数は1つの要素で構成される配列になります-配列への参照(1、2)、t .k。 リンクはスカラー値であり、@ a配列の唯一の要素になります。
- ハッシュコンテキスト
スカラー変数のハッシュのコンテキストでは、ペアのみ、または配列とハッシュへの参照(以下の配列について)を使用できます。
ハッシュコンテキストで奇数の要素を持つ配列が使用されている場合、スクリプトは動作を停止します。 ハッシュを作成するとき、キーの数と値の数は一致しません。
偶数の要素を持つ配列が使用される場合、結果はキーが配列の偶数要素(インデックス0、2、4の下)であり、値が配列の奇数要素(インデックス1、3、5の下)であるハッシュになります
%()コンストラクトは、ハッシュコンテキストを設定するために使用されます。
あなたが書く場合
$a = [1, 2]; %a = $a;
結果は間違いになります! -なぜなら スカラー値がハッシュ(リンク)に割り当てられ、キーの数が値の数と一致しないことがわかります。
あなたが書く場合:
$a = [1, 2]; %a = %($a);
これはチェーンであることがわかります。配列$ aへの参照はハッシュコンテキストで使用されるため、配列自体の値が取得されます。 配列型をハッシュ型にキャストすると、新しいハッシュが作成され(1 => 2)、既に変数%aに割り当てられています。
まあ、これは変数の操作に関する私の小さな経験がまだ限られている場所です。 あなたにとって何か新しいもの、そして面白いものを見てほしい。 良い一日を!