Perl6-変数、匿名ブロックの操作

1. Perl6で変数とリテラルを操作する機能

前の記事で、変数を操作する機能について説明し、コンテキストについても触れました。 この記事では、変数の使用に関する実験と検索の結果を共有し、匿名コードブロックの機能についても簡単に説明します。

さあ始めましょう





Perl6では、宣言時に変数の型を指定できます。

例:

my Int $var;
      
      





この宣言では、番号のみを$ var変数に割り当てることができます。 文字列または別の型を変数に割り当てようとすると、自動型変換は実行されません-型チェックに関するエラーでスクリプトが停止します。 型は、ユーザークラスを含む既存のデータ型にすることができます。

特別な制限なしに、指定したタイプから他のタイプに変換できます。

このような変数の宣言では、初期値はInt()になり、この値は使用できません-これは、コンストラクターが自動的に呼び出されず、変数が指定された型の未定義の値を受け取るために発生します。 変数を宣言するときにオブジェクトの新しいインスタンスを作成するには、コンストラクトを使用できます

 my SomeClass $x .= new(a,r,g,s); my $x = SomeClass.new(a,r,g,s);
      
      





定義されたメソッドを使用して、変数に値があるかどうかを確認できます。

 my Int $x; say $x.defined; #False
      
      







タイプを指定する別の方法は、構築することです

 my $x is Int;
      
      





ただし、最後に、現時点(12.09)のRakudo-starのバージョンでは、この方法はまだ機能しません。

タイプを指定する次の方法も可能です。

 my Array of Array of Int @x;
      
      





ただし、(12.09)では機能しないため、この方法の機能については何も言えません。



主な操作に移りましょう-もちろん、このリストは完全ではありませんが、使用する主な操作のリストを示します。





ブロックについて:

Perl 6のブロックはデータとして使用できます。個々のブロックをスカラー変数に割り当てて実行できます。

 $b = 10; $a = { $b = 1; }; $a(); say $b; # $b=1;
      
      





ブロックが実行のために呼び出されると、呼び出しの結果はこのブロックで最後に計算された値になります。 この例では、計算値は定数1です。ブロック内では、ブロックの操作を終了するためにreturnステートメントを使用することはできません。ブロックが呼び出される関数の実行を完了します。

ブロックは、関数呼び出しの引数として使用できます。

 func($arg1, $arg2, { say 'this is a block'; });
      
      





変数はブロック内で宣言することも、既存の変数を再定義することもできます。ブロックは変数のスコープを設定し、ブロック内で宣言された変数の変更は、このブロック外の同じ名前の変数には影響しません。

次のコードで

 my $a = '  '; my $closure = { say $a; }; { my $a = '  '; $closure(); }
      
      





行の「変数の初期値」が表示されます。 $クロージャー変数を作成するとき、グローバルスコープで宣言された変数が使用され、ブロック内で同じ名前の変数を定義した後でも、最初の変数が使用されます。

次のコードでは、表示されている場所からアクセスできなくなった場合でも、ブロックのローカル変数$ aが使用されます。

 my $a = '  '; my $closure; { my $a = '  '; $closure = { say $a; }; } $closure();
      
      






All Articles