Dir.glob 有排序问题
Dir.glob with sort issue
与“Alphabetize results of 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
知道哪里出了问题吗?
上提供完整代码
当 sort 被赋予一个块时,它期望它为 return -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
与“Alphabetize results of 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
知道哪里出了问题吗?
上提供完整代码当 sort 被赋予一个块时,它期望它为 return -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