0

Dir.glob の結果をアルファベット順に並べ替えるsort」のように、ファイル リストをアルファベット順に取得するために使用します。

Dir.glob("#{options[:path]}/**/*.jpg", File::FNM_CASEFOLD).sort { |file|

  dir, filename = file.match(/.+\/(.+)\/(.+)/).captures

  # ---cut---

}

なしでは問題sortなく動作しますが、エラーで失敗します:

$ rake slides:import -- --user foo --path /bar/baz
(in /home/user/app_folder)
"baz/ - /bar/baz/DSC_4120.JPG - saved"
rake aborted!
ArgumentError: comparison of String with 0 failed
/home/footoo/footoo/lib/tasks/slides.rake:41:in `>'
/home/footoo/footoo/lib/tasks/slides.rake:41:in `sort'
/home/footoo/footoo/lib/tasks/slides.rake:41:in `block (2 levels) in <top (required)>'
/usr/local/rvm/gems/ruby-2.1.5/bin/ruby_executable_hooks:15:in `eval'
/usr/local/rvm/gems/ruby-2.1.5/bin/ruby_executable_hooks:15:in `<main>'
Tasks: TOP => slides:import

何が問題なのですか?

完全なコードはGithubで入手できます。

4

1 に答える 1

4

sort にブロックが与えられると、ソート方法 (カスタム<=>関数) を知るために、-1、0 または 1 を返すことが期待されます。eachデフォルトの並べ替えと意図した動作に戻すには、並べ替え後に追加する必要があります。

Dir.glob("#{options[:path]}/**/*.jpg", File::FNM_CASEFOLD).sort.each{|file|
....
}

ここのドキュメントを読んでください: http://ruby-doc.org/core-2.2.0/Array.html#method-i-sort

于 2015-04-19T18:40:32.153 に答える