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つの演算子はすべて、引数を期待する型に変換します。 フリップするリストを渡すと、リストは文字列に変換され、文字列は逆になります。



All Articles