Пользовательский домен для страниц проекта GitHub

Решение:

# /initializers/string.rb
class String
  IntegerRegex = /^(\d)+$/

  def integer?
    !!self.match(IntegerRegex)
  end
end

# any_model_or_controller.rb
'12345'.integer? # true
'asd34'.integer? # false

Объяснение:

  • /^(\d)+$/ - выражение regex для нахождения цифр в любой строке. Вы можете проверить выражения и результаты регулярных выражений на http://rubular.com/ .
  • Мы сохраняем его в константе IntegerRegex, чтобы избежать ненужного выделения памяти каждый раз, когда мы ее используем в методе.
  • integer? - это вопросительный метод, который должен возвращать true или false.
  • match - метод в строке, который соответствует вхождениям в соответствии с данное выражение регулярного выражения в аргументе и возвращает согласованные значения или nil.
  • !! преобразует результат метода match в эквивалентный булев.
  • И объявив метод в существующий класс String - это исправление обезьяны, которое ничего не меняет в существующих функциях String, но добавляет еще один метод с именем integer? для любого объекта String.

394
задан phwd 1 March 2012 в 00:25
поделиться