Ответ 1
Вы можете использовать Object # method (имя_файла) (хотя AFAIK не является идиоматическим):
filenames.map(&File.method(:size))
Есть ли способ упростить следующий код?
filenames - список имен файлов (строк), например. [ "foo.txt", "bar.c", "baz.yaml" ]
filenames.map { |f| File.size(f) }
Есть ли способ превратить "File.size" в proc или block? Для методов на существующих объектах я могу сделать &:method
. Есть ли что-то аналогичное для методов уровня модуля?
Вы можете использовать Object # method (имя_файла) (хотя AFAIK не является идиоматическим):
filenames.map(&File.method(:size))
filesize = proc { |f| File.size(f) }
filenames.map(&filesize)
Stdlib Pathname
обеспечивает более объектно-ориентированный подход к файлам и каталогам. Возможно, есть способ реорганизовать ваш filelist
, например. вместо:
filenames = Dir.entries(".")
filenames.map { |f| File.size(f) }
вы бы использовали:
require 'pathname'
filenames = Pathname.new(".").entries
filenames.map(&:size)