Как и в заголовке - например, у меня есть метод DrawMe(what)
, и я хочу разрешить запуск этого метода, когда аргумент what
равен одному из следующих значений: {"house", "garden", "cat", "dog"}
- и если нет, то этот метод должен быть остановлена и должна быть напечатана ошибка. Есть идеи?Задание допустимых значений для параметра метода
ответ
class Draw
ALLOWED = %w[house garden cat dog]
def self.me(what)
raise ArgumentError, "Unknown drawable '#{what}'" unless ALLOWED.include?(what)
# Otherwise, carry on!
puts "I'm going to draw a #{what}!"
end
end
Draw.me('garden') #=> I'm going to draw a garden!
Draw.me('cat' ) #=> I'm going to draw a cat!
Draw.me('morals') #=> RuntimeError: Unknown drawable 'morals'
Однако, обратите внимание, что большую часть времени вы не должны быть обеспечение того, разработчики прошли правильный тип значения в ваш метод. Ваш метод будет поднимать свою собственную ошибку, если что-то взрывается в результате неправильного использования; это пустая трата времени и времени компьютера, чтобы попытаться проверить и уловить такие ошибки.
Edit: Если вам нужно использовать это часто, вы можете monkeypatch его везде:
class Object
def ensure_in(enumerable)
unless enumerable.include?(self)
raise ArgumentError, "#{self} must be one of #{enumerable}"
end
end
end
def me(what)
what.ensure_in(ALLOWED)
# Go ahead
end
спасибо! Я думал о чем-то подобном, но есть ли какой-нибудь другой (более простой/короткий) способ сделать такой взгляд в рубинах/рельсах? EDIT: спасибо за предложение, но я в настоящее время разрабатываю свой первый рубиновый драгоценный камень, и мне действительно нужна эта функция;) – mrmnmly
Что-то короче, чем 'raise '...', если только FOO.include? (Bar)'? Как что? Как это может быть намного короче? Вы должны сказать, что это терпит неудачу, вы должны сказать, какие значения являются законными, и вы должны сказать, какое значение нужно проверить. Вы можете опустить приятное сообщение, если хотите. – Phrogz
Я просто подумал, что, возможно, эта функция (метод запуска только с указанными значениями) реализована в некотором buit-in-методе в ruby / rails, который я не знал, - еще раз спасибо;) – mrmnmly
- 1. Задание параметра для передачи
- 2. Динамический список допустимых значений для сценария PowerShell
- 3. Показать список допустимых значений параметра функции во время кода
- 4. Диапазон допустимых значений numpy
- 5. Указанный аргумент вышел за пределы допустимых значений. Имя параметра: размер
- 6. Указанный аргумент вышел из диапазона допустимых значений (имя параметра: сайт)
- 7. Указанный аргумент вышел за пределы допустимых значений. Имя параметра: index
- 8. Drupal: поле PHP для допустимых значений
- 9. Получение допустимых значений для столбца типа SET
- 10. Ограничение допустимых значений аргумента float
- 11. Swagger/Swashbuck список допустимых значений?
- 12. Простых схемы допустимых значений перечислены
- 13. Процентное задание параметра конфигурации
- 14. Задание параметра отчета SSRS
- 15. Передача нескольких значений в качестве параметра метода
- 16. Задание более одного параметра метода в сек: санкционировать осуществление доступа
- 17. Ярлык для параметра метода
- 18. Задание общего параметра для небольшого набора типов
- 19. Задание ограничения конструктора для общего параметра
- 20. Класс или Enum для ограничения параметра функции на список допустимых значений C#
- 21. Задание параметра при вызове PropertyValueFactory
- 22. Динамический список допустимых значений в схеме JSON
- 23. Указанный аргумент был вне диапазона допустимых значений
- 24. Извлечение только допустимых значений из JSON
- 25. Показать список возможных допустимых значений элемента xml
- 26. Задание значений объекта
- 27. передается номер параметра для метода
- 28. Как написать задание cron для метода python
- 29. Передача значений для метода
- 30. Проверить числовые ограничения выражения для эквивалентности/подмножество допустимых значений
Рассмотрите возможность использования символов, не струнные –