在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
對象),以便進行資源清理。