Perl 6:異なるものに異なる名前

Perl 5の初心者は、この言語には文字列を反転するツールがないと不満を述べています。 逆の機能がありますが、何らかの理由で機能しません:

$ perl -E "say reverse ''"  


経験を積んだ後、彼らは解決策を見つけます。 この関数は2つのモードで動作します。 リストコンテキストではリストを反転し、スカラーコンテキストでは次の行を反転します。

  $ perl -E "say scalar reverse ''"  


残念ながら、これはPerlコンテキストモデルの例外です。 ほとんどの演算子と関数はコンテキストを定義し、その後、このコンテキストでデータが解釈されます。 +および*は数字で機能します。 文字列で動作します。 したがって、シンボル(またはuc型の関数名)がコンテキストを定義します。 逆の場合、これはそうではありません。

Perl 6では、過去の間違いを考慮しました。 したがって、逆の文字列、リスト、および反転ハッシュは分離されます。

  #   –  , : $ perl6 -e 'say flip ""'  #   # perl6 -e 'say join ", ", reverse <ab cd ef>' ef, cd, ab #   perl6 -e 'my %capitals =  => "",  => ""; say %capitals.invert.perl' ("" => "  ", "  " => "  ") 


ハッシュを反転する場合、結果のタイプは入力のタイプと異なります。 ハッシュの値は必ずしも異なるわけではないため、ハッシュをハッシュに変換すると、データが失われる可能性があります。 したがって、返されるのはハッシュではなく、ペアのリストであり、プログラマーはそれをどう処理するかを決定します。

非破壊的な反転操作を行う方法は次のとおりです。

  my %inverse; %inverse.push( %original.invert ); 


既存のキーとのペアが逆ハッシュ%に追加されると、元の値は上書きされず、配列になります。

  my %h; %h.push('foo' => 1); # foo => 1 %h.push('foo' => 2); # foo => [1, 2] %h.push('foo' => 3); # foo => [1, 2, 3] 


可能な限り、これらの3つの演算子はすべて、引数を期待する型に変換します。 フリップするリストを渡すと、リストは文字列に変換され、文字列は逆になります。

Source: https://habr.com/ru/post/J253345/


All Articles