В рельсах документы, Пример для объекта`.метод присутствия-это:
region = params[:state].presence || params[:country].presence || 'US'
Но разве'т, что просто эквивалентно:
region = params[:state] || params[:country] || 'US'
В чем смысл использования "присутствия"?
Здесь'ы точке:
''.presence
# => nil
так что если слово params[:государство] == ''`:
region = params[:state].presence || 'US'
# => 'US'
region = params[:state] || 'US'
# => ''
Что's больше, он работает в аналогичным образом (то есть, возвращает "ноль", если объект 'пустой') на каждый объект, который реагирует на пустой?
способ, например:
[].presence
# => nil
Здесь'ы документации, для справки:
http://api.rubyonrails.org/classes/Object.html#method-i-presence
Я просто использовал его в полезный способ, который я нашел аккуратно. Мой переменной является строка, если она'с пустой строкой я хочу нулю, в противном случае я хочу его преобразовать в целое число.
x.presence.try(&:to_i)
"".presence.try(&:to_i) # => nil
"22".presence.try(&:to_i) # => 22
присутствие
- это очень полезно, когда вы хотите вернуть "ноль", если объект не существует и самого объекта, если объект присутствует. Другими словами, вы хотите код, который выглядит так:
объект.подарок? объект : шь
Вместо строки выше, вы можете просто назвать объект.наличие и способ будет делать работу за вас.
В реальный момент, используя `#присутствие заключается в том, что он расширяет понятие falsey values для обработки веб-сценариев и протокола HTTP. Документы Дон'т принять эту цель ясно ... вместо того чтобы просто упором на метод'ы по API: в what, но не зачем. Веб-и HTTP отличается от нормального программирования, потому что пустая строка-это часто то, что вы получаете вместо "ноль" с просьбой.
В обычный Рубин, однако пустая строка truthy. Это делает веб-разработчики пишут много лишнего шаблонный код, как документы на объект.присутствие` использует в качестве примера, как другие здесь процитировали.
В нижней строке для написания веб-приложений в Rails, что мы можем (должны) теперь используйте #подарить? " и " присутствие#со стандартным Ruby короткое замыкание или
||`:
# Check for a param like this
@name = params[:name].presence || 'No name given'
Эту линию правильно обрабатывает все веб-сервера пакеты в параметры просьбе `для нас. Хотя это старый добрый Руби не:
# DON'T DO THIS
@name = params[:name] || 'No name given'