β

《松本行弘的程序世界》中matz有段Ruby代码貌似写错了?

Ruby China社区 170 阅读

最近开始读这本书了,看到第三章《程序块》中3.3.10 Lisp的内部包和块的区别中提到的这段代码

# (a)
col.select{|x| g(x) }.collect{|x| f(x)}
# (b)
col.select(&:g).collect(&:f)

文中提到b是Ruby 1.9的省略写法。
这里有两个问题,首先col.select(&:g).collect(&:f)对应的写法应该是col.select{|x| x.g}.collect{|x| x.f}吧,col.select{|x| g(x) }.collect{|x| f(x)}这句语句应该是不可省略了,之前我对此一直很不满呢,因为感觉出现这类代码其实频率还更高些,比如逐个输出的情况。其次这也不应该是Ruby 1.9的省略写法吧,1.8也有啊。

作者:Ruby China社区
Ruby China社区最新发帖.