2012-12-25 72 views
2

我正在閱讀Andre Ben Hanou的「Practical Ruby for System Administration」,它有一個單行命令,列出大小大於1KB的目錄中的所有文件,然後按照修改日期。瞭解Ruby中Enumerable的查找函數

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

我認爲這應該是select而不是find

根據find的文檔,它會返回塊不爲false的第一個。因此,在任何情況下,find都不會返回文件列表。這就像書中的第19頁,我對Ruby完全陌生,我認爲作者是錯誤的,因爲書中的命令已經給我一個錯誤。

[email protected] /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) 
[email protected] /tmp $ 

任何人都可以確認作者是錯誤的或我只是很愚蠢?

+0

上有SO說明塊可如何被傳遞到功能衆多的答案。因爲SO想要一個問題而不是幾個問題,所以應該刪除這個單獨的問題,做一些搜索以獲得更多信息,並查看塊是否有意義。閱讀「[編程紅寶石](方法和塊)」的「方法和塊」部分,其中討論了它。 –

回答

2

列出所有文件

是,筆者是錯誤的,你說得對。它應該是.select,而不是.find