def example
@lines.select {|line| ... }.map {|line| ... }.uniq.sort
end
В Ruby 1.9 и 1.8.7 вы можете также связывать и связывать итераторы, просто не передавая им блок:
enum.select.map {|bla| ... }
Но в этом случае это на самом деле невозможно, так кактипы возвращаемых значений блока select
и map
не совпадают.Это имеет больше смысла для чего-то вроде этого:
enum.inject.with_index {|(acc, el), idx| ... }
AFAICS, лучшее, что вы можете сделать, это первый пример.
Вот небольшой пример:
%w[a b 1 2 c d].map.select {|e| if /[0-9]/ =~ e then false else e.upcase end }
# => ["a", "b", "c", "d"]
%w[a b 1 2 c d].select.map {|e| if /[0-9]/ =~ e then false else e.upcase end }
# => ["A", "B", false, false, "C", "D"]
Но то, что вы действительно хотите, это ["A", "B", "C", "D"]
.