19

有没有办法简化下面的代码?

filenames 是文件名(字符串)的列表,例如 ["foo.txt", "bar.c", "baz.yaml"]

filenames.map { |f| File.size(f) }

有什么办法可以将“File.size”变成 proc 或 block?对于现有对象的方法,我可以做&:method. 模块级方法有类似的东西吗?

4

3 回答 3

31

您可以使用Object#method(method_name)

filenames.map(&File.method(:size))
于 2013-08-15T12:35:21.243 回答
4
filesize = proc { |f| File.size(f) }
filenames.map(&filesize)
于 2013-08-15T12:32:48.837 回答
4

StdlibPathname为文件和目录提供了一种更加面向对象的方法。也许有一种方法可以重构你的filelist,例如,而不是:

filenames = Dir.entries(".")
filenames.map { |f| File.size(f) }

你会使用:

require 'pathname'
filenames = Pathname.new(".").entries
filenames.map(&:size)
于 2013-08-15T13:27:08.547 回答