更新
忽略以下。结果证明这是一个仅限于 Macruby 0.10 的错误,并且可能特定于我的安装。我会留下帖子以防其他人遇到问题。
我似乎误解了关于红宝石块的一些东西。我想使用Pathname
orFind
模块find
在特定目录树中定位特定文件。但是,我无法让提供的块find
返回任何值。
从此:
n= (1..10).each {|i| break i if i > 5}
puts "n = #{n}" #=> n=6
...有效(并且是一种常见的结构)我希望:
starting_directory= #... a directory path
file_name_I_want_to_find= #... a file name e.g. my_file.txt
pd=Pathname.new(starting_directory)
path=pd.find{|p| break p if p.basename.to_s==file_name_I_want_to_find }
puts "path = #{path}" #=> path =
... 或者:
path=Find.find(starting_directory) {|p| break p if p.include?(file_name_I_want_to_find) }
puts "path = #{path}" #=> path =
... 只会产生一条寻求的路径,但根本不会产生任何价值。
我知道我的测试有效,因为以下两项:
pd.find{|p| puts p if p.basename.to_s==file_name_I_want_to_find }
#=> /path/to/file_name_I_want_to_find
Find.find(starting_directory) {|p| puts p if p.include?(file_name_I_want_to_find) }
#=> /path/to/file_name_I_want_to_find
...按预期工作。
为什么不像break
第find
一个例子那样工作?
更一般地说,我是否在这种情况下使用了正确的红宝石技术/习语?