如何将Ruby方法转换为块?

有没有办法简化以下代码?

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

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

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

您可以使用Object#method(method_name) :

 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)