0

我有 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

如何重构该代码?也许动态语句通过将一些哈希传递给输入来构建。我是元编程的新手。请给我建议

4

1 回答 1

1

好吧,它可能不是您正在寻找的东西,但它大大缩短了代码。

另外,我删除了那些 key?() 方法,因为如果 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
于 2012-05-26T23:34:11.900 回答