Меня раздражает следующая многословная запись на Ruby:
polys.each { |poly| poly.edges.each {|edge| draw edge.start, edge.end } }
(polys
— это массив полигонов, ребра — это метод Polygon, возвращающий массив ребер)
В идеале я хотел бы сократить это до чего-то вроде этого:
polys.each.edges.each { draw _.start, _.end }
Более конкретно я хотел бы знать:
- Как мы могли написать хак method_missing как с первым каждым? (При вызове с отсутствующим методом перечислитель может вызвать этот метод для каждого элемента, возвращенного из перечисления)
- Есть ли способ избавиться от
|x|
, используя любой символ или имя по умолчанию?
draw edge.start edge.end
? Неdraw edge.start, edge.end
? - person mu is too short   schedule 09.08.2016[[1,2],[3,4]].each { |e| puts e }
с[[1,2],[3,4]].each { |_,e| puts e }
Как здесь можно использовать значение по умолчанию для переменных блока? - person Cary Swoveland   schedule 09.08.2016def draw_edge(edge); draw edge.start, edge.end; end; def draw_poly(poly); poly.each { |edge| draw_edge(edge) }; end; def draw_polys(polys) { |poly| draw_poly(poly) }
. - person Cary Swoveland   schedule 09.08.2016