将Perl的文件输入角度运算符作为通用迭代器/生成器进行重载是否合适?

时间:2011-03-06 06:29:28

标签: perl syntax iterator generator

我见过几个模块(例如:Iterator::Simple),它们使用Perl的角度运算符作为Python生成器的近似等价物。具体来说,提供迭代值列表而不实际将整个列表加载到内存中的能力。这通常被认为是运营商功能的适当扩展,还是被认为是滥用它?

1 个答案:

答案 0 :(得分:7)

<HANDLE>运算符只是readline HANDLE函数的语法糖,它是句柄上的迭代器。如果一个对象提供迭代访问,我没有看到重载<>有任何问题,以便为最终用户提供灵活性。

<>运算符不接近生成器,模块执行此操作。所有

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

给你一种写作的奇特方式

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

Perl是一种非常富有表现力的语言,因为它可以通过许多不同的方式解决问题。许多模块选择以这种精神提供替代接口。这允许用户编写最适合他们的方式。