Perlの角度演算子をPythonジェネレータと同等のものとして使用するいくつかのモジュール(例:Iterator::Simple)を見てきました。具体的には、リスト全体を実際にメモリにロードせずに値のリストを反復処理する機能を提供します。これは一般的にオペレータの機能の適切な延長と考えられているのですか、それともそれを悪用していると考えられますか?一般的なイテレータ/ジェネレータとしてPerlのファイル入力角度演算子をオーバーロードすることは適切ですか?
2
A
答えて
6
演算子<HANDLE>
演算子は、readline HANDLE
関数の構文砂糖にすぎません。これは、ハンドルのイテレータに非常によく似ています。オブジェクトが反復アクセスを提供する場合、私は<>
のオーバーロードに問題はなく、エンドユーザに柔軟性を提供します。
<>
演算子はジェネレータに近似しないため、モジュールはそれを行います。すべてのこと
while (<$iterator>) {...}
はあなたを与える
while (defined ($_ = $iterator->next)) {...}
Perlを書くためのファンシーな方法は、それはあなたが問題を解決することを可能にするさまざまな方法による非常に表情豊かな言語です。多くのモジュールは、このような考え方で代替インタフェースを提供することを選択しています。これにより、ユーザーは自分にとって最適な方法をコーディングすることができます。
関連する問題
- 1. C++でコンストラクタと=演算子のオーバーロードをコピーする:一般的な関数は可能ですか?
- 2. C++でバイナリ・リレーショナル演算子をオーバーロードする適切な方法
- 3. テンプレートとしての挿入演算子と抽出演算子のオーバーロード
- 4. オーバーロード演算子 `[]`と ':'
- 5. 同じクラスの代入として、逆参照としての()演算子と=演算子の両方をオーバーロードすることはできますか?
- 6. C++ BigIntegerと代入演算子オーバーロード
- 7. 演算子の '='と '+'のオーバーロード
- 8. 演算子のオーバーロード[]と=
- 9. テンプレートクラスと演算子のオーバーロード
- 10. 演算子オーバーロード - ここ>
- 11. C++テンプレートとオーバーロード演算子
- 12. C++静的演算子オーバーロード
- 13. オーバーロード比較です演算子「無効な演算子は、<」
- 14. 演算子のオーバーロード演算
- 15. 乗算演算子をメンバー関数としてオーバーロードする
- 16. ":"演算子は代入演算子 "="と同等ですか?
- 17. 演算子をテンプレートとしてオーバーロードするとどうなりますか?
- 18. 入れ子型のオーバーロード演算子
- 19. 文字列の挿入演算子と抽出演算子のオーバーロード
- 20. オーバーロードされた算術演算子を使用して、オーバーロードされた抽出演算子をカスケードすることは可能ですか?
- 21. オーバーロード演算子+
- 22. 演算子オーバーロード==
- 23. <<演算子とC++の文字列のオーバーロード+演算子
- 24. 加算演算子と動的ベクトルをオーバーロードするときのセグメンテーションフォールト
- 25. 文字列の〜演算子をオーバーロードすることはできますか?
- 26. C++オーバーロード:[] []演算子のオーバーロード
- 27. "as"または "is"演算子をオーバーロードすることは可能ですか
- 28. Cで演算子をオーバーロードすることはできますか?
- 29. C#でnameof演算子をオーバーロードすることはできますか?
- 30. 演算子 "..."をC++でオーバーロードすることはできますか?
これが動作しない、オーバーロードされたので、オペレータは、 '<>'一度だけ呼ばれています! – Jakob
@Jakob =>あなたが話しているかわから 'しばらく(<$itr>){...}'構築物に、オーバーロードされた演算子は、各ループ反復で呼び出されません。 –
申し訳ありませんが、私は間違っています: '<>' whileループで動作しますが、 'my @all = <$iterator>'や 'foreach(<$iterator>)'を行うことはできませんので、この落とし穴を指摘しない限り。 – Jakob