我已经写了perl代码全职几个月了(生物信息学),我一直在努力提高我的技能.就在今天,对我来说,我从不使用地图或grep.回顾我的代码,我意识到这些工具可以在这里或那里节省几条线,但只能牺牲foreach循环的灵活性.我的问题如下:
有没有任何情况下你使用map或grep在foreach / for循环中带来了显着的优势,除了保存一两行代码?
谢谢你的时间!
解决方法
Schwartzian Transform将是一个例子:
@sorted = map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [$_,foo($_)] } @unsorted;
你可以用一堆foreach循环来做,但你必须把它们分开来弄清楚发生了什么;一旦你看到了Schwartzian变换,你会立即认出成语.
一般来说,我认为地图和grep都很好,因为它们允许您清晰而紧凑地表达您的意图,而不需要语法层面.如果你看到一张地图,那么你知道某种简单的数据结构转换正在进行;如果你看到一个grep,那么你知道一些过滤/选择正在进行.你可以用foreach来完成所有的操作,但你的代码的意图不像map或grep那么清楚,你甚至可以用if和goto这样做,如果你想,但是你的意图将被埋在更多的语法和状态跟踪下.