【发布时间】:2012-12-11 10:46:08
【问题描述】:
我正在阅读 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 $
任何人都可以确认作者是错误的还是我只是愚蠢的?
【问题讨论】:
-
关于 SO 有很多答案,解释了如何将块传递给函数。因为 SO 想要一个问题,而不是几个问题,所以您应该删除那个单独的问题,进行一些搜索以获取更多信息并查看块是否有意义。阅读“[Programming Ruby](方法和块)”的“方法和块”部分,其中谈到了它。
标签: ruby enumerable