如何将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)