我发现自己对Ruby中的以下冗长的写作感到恼火:
polys.each { |poly| poly.edges.each {|edge| draw edge.start, edge.end } }
(polys
是一个多边形数组,edge是Polygon返回边数组的方法)
理想情况下,我想将此缩短为:
polys.each.edges.each { draw _.start, _.end }
更具体地说,我想知道:
|x|
使用任何符号或默认名称?答案 0 :(得分:4)
没有。你最近能做的就是:
polys.flat_map(&:edges).each { |_| draw _.start, _.end }
flat_map
将转换另一个数组中的数组并将其展平为单维数组。如果块内部正在调用没有参数的单个方法,则可以使用&:edges
快捷方式。
话虽如此,我可能会更接近您的初始提案,因为它更具可读性:
polys.each do |poly|
poly.edges.each {|edge| draw edge.start, edge.end }
end
请记住,你曾经编写过一段代码,但它已经阅读了很多,所以可读性胜过简洁。