2

我正在阅读 Andre Ben Hanou 的“Practical Ruby for System Administration”,它有一个单行程序,列出了一个目录中大小大于 1KB 的所有文件,然后按修改日期排序。

ruby -e 'puts Dir["*"].find { |f| File.size(f) > 1024 }.sort_by{|f| File.mtime(f)}'

我认为它应该select代替find.

根据文档find,它返回块不为假的第一个。因此,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 $ 

任何人都可以确认作者是错误的还是我只是愚蠢的?

4

2 回答 2

4

你是对的,它应该是.select(或它的 alias .find_all,这可能是这个错误的原因)。

在这种情况下,为每个对象评估块,这里有一个教程: http ://www.tutorialspoint.com/ruby/ruby_blocks.htm

于 2012-12-25T13:38:44.200 回答
2

列出所有文件

是的,作者错了,你是对的。应该是.select,不是.find

于 2012-12-25T13:37:48.943 回答