【问题标题】:Ruby decrement to limit红宝石减量限制
【发布时间】:2011-07-06 21:45:21
【问题描述】:

我想要一组可以增加/减少值的方法,但下限为零。

基本上:

def decrement
  @value -= 1
end

除了,我不希望它低于零。

最好的“红宝石方式”是什么?

【问题讨论】:

    标签: ruby methods limit increment decrement


    【解决方案1】:
    def decrement
      @value -= 1 unless @value.zero?
    end
    

    或者如果你想抛出异常:

    def decrement
      raise RangeError, "can't decrement below zero" if @value.zero?
      @value -= 1
    end
    

    【讨论】:

    • 如果0 < value < 1会失败
    • 失败案例的有趣之处...在这种情况下,我使用整数,所以我无法达到失败条件,可以吗?
    • 如果您使用的是整数,则不会。但是您只是指定了“一个值”,所以我选择不做假设。
    【解决方案2】:
    def decrement
      @value = [@value-1, 0].max
    end
    

    【讨论】:

    • 这很聪明,但一开始并不是最易读的。但是,它似乎确实避免了 yjerem 的回答中提到的失败案例。
    • 我的猜测是它的效率也低于您的解决方案。无论如何,我总是喜欢提供替代方法,因为您永远不知道它们何时可能在不同条件下被证明是有用的。
    【解决方案3】:
    def decrement(value)
      value -= 1 if value - 1 >= 0
    end
    

    【讨论】:

      【解决方案4】:
      def decrement
        @value -= 1 unless @value - 1 < 0
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-01
        • 2011-11-18
        • 1970-01-01
        • 2011-07-25
        • 1970-01-01
        • 1970-01-01
        • 2019-08-09
        相关资源
        最近更新 更多