我有n次类似的陈述
if trigger_data.tt_closed
unless trouble_ticket.changes.key?(:status)
@run = 0
break
end
unless trouble_ticket.changes[:status][1] == "Closed"
@run = 0
break
end
end
if trigger_data.tt_assignee
unless trouble_ticket.changes.key?(:assigned_to)
@run = 0
break
end
unless trouble_ticket.changes[:assigned_to][1] == trigger_data.tt_assignee
@run
break
end
end
如何重构该代码?也许动态语句构建与传递一些哈希输入。我是元编程的新手。请给我建议
答案 0 :(得分:1)
嗯,它可能不是你想要的,但它会缩短代码。
另外,我删除了那些关键的?()方法,因为如果key不存在,它只传递nil,而Ruby中的含义与if语句的false相同。
为了清楚起见,我把它留了2条if语句。 :)changes = trouble_ticker.changes
if trigger_data.tt_closed && changes[:status][1] != "Closed"
@run = 0
break
end
if t = trigger_data.tt_assignee && changes[:assigned_to][1] != t)
@run = 0
break
end