nj0308 2009-01-02 12:22
浏览 144
已采纳

请大家帮忙看看嵌套程序能否调用block

定义:

def trave_path path, *args
if File.directory? path
Dir.foreach(path) { |p| trave_path path + "/" + p, *args unless p =~ /^./ }
else
yield path, *args
end
end

调用('6124000'是目录,下面还包含目录,然后才是文件):
trave_path("61240000") do |pa|
p pa
end

报错:
D:/Program Files/Ruby1.86/Ruby/lib/lbc/Path.rb:6:in trave_path': no block give
(LocalJumpError)
from D:/Program Files/Ruby1.86/Ruby/lib/lbc/Path.rb:4:in
trave_path'
from D:/Program Files/Ruby1.86/Ruby/lib/lbc/Path.rb:4:in foreach'
from D:/Program Files/Ruby1.86/Ruby/lib/lbc/Path.rb:4:in
trave_path'
from D:/Program Files/Ruby1.86/Ruby/lib/lbc/Path.rb:4:in trave_path'
from D:/Program Files/Ruby1.86/Ruby/lib/lbc/Path.rb:4:in
foreach'
from D:/Program Files/Ruby1.86/Ruby/lib/lbc/Path.rb:4:in `trave_path'
from get_zfbp.rb:1

注意:如果“6124000”本身就是文件,程序是可以运行的。

难道不能在嵌套程序中调用block呢,还是我的用法不对。请大家指教。

  • 写回答

3条回答 默认 最新

  • rednaxelafx 2009-01-02 13:29
    关注

    哦另外,这个方法不是太安全。如果第一次调用传入的参数是一个不存在的路径,那么会进入else分支,而这并不意味着它是一个文件。不知道这个行为是否符合你原本的预期。我觉得还是用elsif File.file?来检查一下比较好

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?