Целесообразно ли перегрузить оператор угла ввода файла Perl как общий итератор / генератор? - PullRequest
3 голосов
/ 06 марта 2011

Я видел несколько модулей (пример: Iterator :: Simple ), которые используют оператор угла Perl как приблизительный эквивалент генераторов Python.В частности, предоставляя возможность перебирать список значений без фактической загрузки всего списка в память.Обычно это считается соответствующим расширением функциональности оператора или злоупотреблением им?

1 Ответ

7 голосов
/ 06 марта 2011

Оператор <HANDLE> является просто синтаксическим сахаром для функции readline HANDLE, которая во многом является итератором над дескриптором. Если объект обеспечивает итеративный доступ, я не вижу проблем с перегрузкой <> для обеспечения гибкости для конечного пользователя.

Оператор <> не приближает генератор, модуль делает это. Все это

while (<$iterator>) {...}

дает вам причудливый способ написать

while (defined ($_ = $iterator->next)) {...}

Perl является очень выразительным языком благодаря множеству различных способов, которыми он позволяет решать проблемы. Многие модули предпочитают предлагать альтернативные интерфейсы в этом духе. Это позволяет пользователям кодировать наиболее подходящий для них способ.

...