2

AndreBenHanouによる「PracticalRubyforSystem 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 $ 

誰かが作者が間違っていることを確認できますか、それとも私はただ愚かです。

4

2 に答える 2

4

そうです、そうあるべきです.select(またはそのエイリアス.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 に答える