在Ruby中,异常处理和资源清理可以通过begin-rescue-finally
块来实现。begin-rescue-finally
块允许你在执行代码时捕获异常,并在异常发生时执行特定的代码块。finally
子句中的代码无论是否发生异常都会被执行,因此非常适合用于资源清理操作。
以下是一个简单的示例,展示了如何使用begin-rescue-finally
块进行资源清理:
require 'open-uri'
def download_file(url, local_filename)
begin
# 尝试打开并读取URL内容
content = open(url)
File.open(local_filename, 'wb') do |file|
file.write(content.read)
end
rescue OpenURI::HTTPError => e
# 处理HTTP错误异常
puts "Error: #{e.message}"
rescue => e
# 处理其他异常
puts "Error: #{e.message}"
finally
# 无论是否发生异常,都会执行此处的代码
if content
content.close
end
puts "Resource cleanup completed."
end
end
download_file("https://example.com/file.txt", "local_file.txt")
在这个示例中,我们尝试从给定的URL下载文件并将其保存到本地。我们使用begin-rescue-finally
块捕获可能发生的异常,如HTTP错误或其他异常。在finally
子句中,我们确保关闭已打开的资源(在这种情况下是content
对象),以便进行资源清理。