我想自己返回方法
def self.open_folder(file)
Dir.glob(file+"*") do |subfiles|
if File.directory?(subfiles)
open_folder(subfiles) ###Problem here
end
if File.file?(subfiles)
open_file(subfiles)
end
end
end
我想要的是返回“open_folder”以保持打开子文件夹。我收到了一个错误
block in open_folder': stack level too deep
你能帮我找到解决方案吗?
答案 0 :(得分:1)
如果您只想将某些方法应用于子目录中的每个文件,可以使用:
Dir.glob("**/*").select{ |path| File.file?(path) }.each{ |file| open_file(file) }
答案 1 :(得分:0)
此代码适用于我:
def open_file(file)
# Do your stuff here
puts file
end
def open_folder(file)
Dir.glob("#{file}/*") do |subfile|
File.directory?(subfile) ? open_folder(subfile) : open_file(subfile)
end
end
open_folder('path/to/directory')
注意:
如果您直接在self.*
或在您定义的任何类之外运行此代码,则无需将方法定义为irb
。
我使用字符串插值(#{foo}
)而不是连接字符串。
将“ / * ”附加到文件路径将直接查找父项下的所有文件和目录(不是嵌套的子目录和文件)。
在这种情况下,您可以使用if
,而不是使用2 elsif
,因为在每次迭代中只有1个条件可以为真。