[英]Begin Rescue Refactor
我不得不多次使用開始營救方法,並且我想進行重構,但是無法創建一個傳遞使用.parent方法的參數的方法。
這是因為.parent是引發錯誤的方法,但這是唯一正在更改的東西,我不知道如何在不調用該方法的情況下編寫代碼
我確實想獲取父母的名字,但是如果沒有父母,那就是我得到錯誤的原因。 所以我基本上需要它在沒有父項的情況下返回一個空字符串,但是我不知道如何遞歸添加.parent。
def check_parent_name(object)
if ['body','html', 'head', 'document'].include?(object.parent.name)
''
else
object.parent.content
end
end
begin
parent_content = check_parent_name(img.parent)
rescue => e
parent_content = ''
end
begin
parent_parent_content = check_parent_name(img.parent.parent)
rescue => e
parent_parent_content = ''
end
begin
parent_parent_parent_content = check_parent_name(img.parent.parent.parent)
rescue => e
parent_parent_parent_content = ''
end
begin
parent_parent_parent_parent_content = check_parent_name(img.parent.parent.parent.parent)
rescue => e
parent_parent_parent_parent_content = ''
end
begin
parent_parent_parent_parent_parent_content = check_parent_name(img.parent.parent.parent.parent.parent)
rescue => e
parent_parent_parent_parent_parent_content = ''
end
一種非常簡單的方法是在語句中直接使用rescue
:
parent_content = check_parent_name(img.parent) rescue ""
但這不是您應該編碼的方式。
就像DaveNewton所說的那樣,我們需要知道您想要使用此代碼的用途,並且我們可以幫助您找到一種更好,更清潔,更靈活的方式來實現該功能!
似乎您的記錄之間有一個樹(父子)結構,我錯了嗎?
遞歸方法(=調用自身)大概就是您想要的,例如:
def your_method(img)
return "" unless img.present?
if img.try(:parent).present?
your_method(img.parent)
else
return check_parent_name(img)
end
end
但是我不確定這就是你想要的...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.