Perl6-データ型の操作

これまでのところ、記事ではデータ型の表面的な言及しかありませんでした-特定の型の変数を宣言するか、操作の結果を示しますが、できることはコンパイラーのふざけた態度を容認することだけでした「。

実際、 神のよう感じたい、自分の台本のタイプの管理において少なくとも何らかの形で重要な人にとっては、猫を歓迎します。





そこで、2つの変数をパラメーターとしてとる関数を作成したとしましょう。

sub Func($a, $b) {...}
      
      







また、関数は常に1つの方法で実行する必要がありますが、小数と文字列が突然パラメーターとして渡される場合、またはその逆の場合は、他のアクションを実行します。



小さく始めましょう-各変数に対してどのタイプのデータがあるかを調べます。これには、タイプオブジェクトを返すWHATメソッドを使用します-データタイプを示すオブジェクト(たとえば、値 "(Int)"が返されます)。 返されるのはオブジェクトであり、文字列ではないことに注意してください。たとえば、==またはeqによる2つのタイプの単純な比較は機能しません。 受信したオブジェクトと型を比較す​​るために、スマート比較演算子「~~」を使用します。

 sub Func($a, $b) { $condition = ( ($a.WHAT ~~ (Rat)) ?& ($b.WHAT ~~ (Str)) ); $condition ?|= ( ($a.WHAT ~~ (Str)) ?& ($b.WHAT ~~ (Rat)) ); if ($condition) { #`(SomeWork) } else { #`{AnotherWork} } }
      
      





(Rat)と(Str)は、それぞれ実数と文字列の型オブジェクトです。

すでに忘れている人のために?&-論理的な「そして」、?| -論理的な「OR」。



そして、変数の値の型を決定する方法と、それに応じて何らかのアクションを実行する方法を学びました。 しかし、どの場合にこれを行う必要があるか見てみましょう。

 my Int $a; sub Func($p) { $a = $p; } Func(10); Func("Test");
      
      





この場合、整数のみを含むことができる変数に文字列を割り当てようとすると、スクリプトが停止します。



この例を少し修正して、次のように記述します。

  $a = +($p);
      
      





その結果、エラーもキャッチし、スクリプトが停止します。エラーは割り当てに関するものではなく、数値コンテキストの誤った型に関するものです。このことから、プライベートコンテキストは型制限を追加するだけであり、手動の型変換では他の何か。



次の構成を使用してみましょう。

  $a = Int($p);
      
      





それは既に優れています。なぜなら、型の数(Rat)を渡すと、型(Int)に変換されるからです。しかし、文字列を渡すと、文字列を数字に変換するエラーが発生します。 10番目の数値システムの数値。

これまでのところ、スクリプトをさらに機能させる方法は1つしかありません。例外をキャッチすることです。 私の意見では、これは最も論理的なアクションですが、これについては次の記事で説明します



また、関数が説明と一致しない値を返そうとすると、スクリプトが停止する場合があります。

 sub Func($p) of Int { return $p; } Func("test");
      
      





そのため、この場合、出力値を確認することもできます。



最後に、保存されたデータのタイプに対する制限は、関数の「インターフェース」を記述するのに非常に役立ち、型付きプログラミング言語のいくつかの利点を与えることができると、私は言いたいと思います。

この情報がお役に立てば幸いです。



All Articles