Ограничить число верхними / нижними границами?

Существует ли встроенный путь или более изящный способ ограничить цифру числа верхними / нижними границами в Ruby или в направляющих?

например, что-то как:

def number_bounded (num, lower_bound, upper_bound)
  return lower_bound if num < lower_bound
  return upper_bound if num > upper_bound
  num
end
11
задан SilentGhost 16 June 2010 в 17:48
поделиться

3 ответа

Вот умный способ сделать это:

[lower_bound, num, upper_bound].sort[1]

Но это не очень удобно для чтения. Если вам нужно сделать это только один раз, я бы просто выполнил

num < lower_bound ? lower_bound : (num > upper_bound ? upper_bound : num)

или, если вам это нужно несколько раз, обезьяна исправьте модуль Comparable:

module Comparable
  def bound(range)
     return range.first if self < range.first
     return range.last if self > range.last
     self
  end
end

, чтобы вы могли использовать его как

num.bound(lower_bound..upper_bound)

Вы также можете просто потребовать ] ruby ​​facets , который добавляет метод clip , который делает именно это.

13
ответ дан 3 December 2019 в 03:51
поделиться

Вы можете использовать min и max, чтобы сделать код более лаконичным:

number_bounded = [lower_bound, [upper_bound, num].min].max
12
ответ дан 3 December 2019 в 03:51
поделиться

Поскольку вы упоминаете Rails, я расскажу, как это сделать с помощью проверки.

validates_inclusion_of :the_column, :in => 5..10

Это, конечно, не приведет к автоматической корректировке числа.

0
ответ дан 3 December 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: