Is there a method to limit/clamp a number?

后端 未结 5 707
醉酒成梦
醉酒成梦 2021-01-01 10:51

I wrote the following code, which keeps x within the range (a..b). In pseudo code:

(if x < a, x = a; if x > b, x = b)
         


        
5条回答
  •  攒了一身酷
    2021-01-01 10:55

    The most appealing solution for now in my opinion is the sort option:

    [min,x,max].sort[1] 
    

    When you don't mind monkey patching existing core classes. I think the range class is a good candidate for a clamp method

    class Range
      def clamp(v)
        [min,v,max].sort[1]
      end
    end
    
    (min..max).clamp(v)
    

    Or the plain array object. I don't like this, because the clamp function only is correct for 3 element arrays

    class Array
        def clamp
          sort[1]
        end
    end
    

    You can call it like this:

    [a,x,b].clamp
    

提交回复
热议问题