私はPerlクラスを持っています。それはsort()
方法を持っている、と私はそれがsort()
機能内蔵に多かれ少なかれ同じになりたい:Perl可変範囲の質問
$object->sort(sub ($$) { $_[0] <=> $_[1] });
しかし、私は行うことはできません。そのため、スコープの
$object->sort(sub { $a <=> $b });
。しかし、List :: Utilモジュールはreduce()
でこれを行います。私はList :: Utilモジュールを見て、これを実現させるために、no strict 'vars'
でかなり厄介なことをします。私はそれを試みたが、役に立たなかった。
reduce()
は、適切な名前空間にエクスポートされているため、私のクラスはこれを行うことができません。私の理解では、関数が別の名前空間にしっかりと入っています。これは正しいのですか、それとも私の状況でこれを行うためのいくつかの(間違いなく恐ろしい、あまりアドバイスされていない)方法がありますか?
あなたの目的には十分に良いかもしれませんが、壊れやすいです。比較関数が 'sort'メソッドの呼び出し元と同じパッケージに属するという保証はありません。それはSub :: Identifyが入るところです。 – cjm
@cjm - これは事実です。私は間違いなくSub :: Identifyを見ていきますが、私の大きな問題は一般的なケースでは機能しないようにすることです。特定のソリューションは一般的な障害よりも優れています。しかし、この答えをあなたのものと組み合わせると、私には良い解決策である一般的な解決策が与えられます。 –
'sort'組み込み関数も同じ問題を抱えています。比較関数は呼び出し側と同じパッケージから来ると仮定します。だからあなたがそれで生きることができるならば、Sub :: Identifyへの依存関係を保存します。 (条件付きでSub :: Identifyを要求し、それがインストールされていなければ 'caller'にフォールバックすることもできますが、それ以上の作業です) – cjm