我见过几个模块(例如:Iterator::Simple),它们使用Perl的角度运算符作为Python生成器的近似等价物。具体来说,提供迭代值列表而不实际将整个列表加载到内存中的能力。这通常被认为是运营商功能的适当扩展,还是被认为是滥用它?
答案 0 :(得分:7)
<HANDLE>
运算符只是readline HANDLE
函数的语法糖,它是句柄上的迭代器。如果一个对象提供迭代访问,我没有看到重载<>
有任何问题,以便为最终用户提供灵活性。
<>
运算符不接近生成器,模块执行此操作。所有
while (<$iterator>) {...}
给你一种写作的奇特方式
while (defined ($_ = $iterator->next)) {...}
Perl是一种非常富有表现力的语言,因为它可以通过许多不同的方式解决问题。许多模块选择以这种精神提供替代接口。这允许用户编写最适合他们的方式。