我正在阅读Andre Ben Hanou的“实用Ruby for System Administration”,它有一个单行程序,列出了大小超过1KB的目录中的所有文件,然后按修改日期排序。
ruby -e 'puts Dir["*"].find { |f| File.size(f) > 1024 }.sort_by{|f| File.mtime(f)}'
我认为它应该是select
而不是find
。
根据find
的文档,它返回块不为false的第一个。因此,find
在任何情况下都不会返回文件列表。这就像书中的第19页,我对Ruby完全不熟悉,我认为作者错了,因为书中的命令已经给我一个错误。
shadyabhi@archlinux /tmp $ ruby -e 'puts Dir["*"].find { |f| File.size(f) > 1024 }.sort_by{|f| File.mtime(f)}'
-e:1:in `<main>': undefined method `sort_by' for "mysql-security-excerpt-5.1-en.pdf":String (NoMethodError)
shadyabhi@archlinux /tmp $
任何人都可以确认作者是错的还是我只是愚蠢的?
答案 0 :(得分:4)
您是对的,它应该是.select
(或其别名.find_all
,这可能是造成此错误的原因。)
在这种情况下,将为每个对象评估块,这是一个教程: http://www.tutorialspoint.com/ruby/ruby_blocks.htm
答案 1 :(得分:2)
列出所有文件
是的,作者错了,你是对的。它应该是.select
,而不是.find
。