Dir.glob与排序问题

正如在“Alphabetize results of Dir.glob”,我用sort获得按字母顺序排列的文件列表:Dir.glob与排序问题

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

任何想法有什么不对?

Full code on Github。

回答:

当给出排序块时,它希望它返回-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

以上是 Dir.glob与排序问题 的全部内容, 来源链接: utcz.com/qa/261457.html

回到顶部