Класс: Object Приватный
- Наследует:
- BasicObject
- Определён в:
- extend/blank.rb,
extend/object/deep_dup.rb,
extend/object/duplicable.rb
Обзор
Этот класс является частью приватного API. Этот класс можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого класса, поскольку он может быть удалён или изменён без предупреждения.
Большинство объектов можно клонировать, но не все. Например, методы нельзя дублировать:
method(:puts).dup # => TypeError: allocator undefined for Method
Классы могут указывать, что их экземпляры нельзя дублировать, удаляя +dup+/+clone+ или вызывая из них исключения. Поэтому для дублирования произвольного объекта обычно используют оптимистичный подход и готовы перехватить исключение, например:
arbitrary_object.dup rescue object
Rails дублирует объекты в нескольких критически важных местах, где они не настолько произвольны. Эта rescue очень затратна (примерно в 40 раз медленнее предиката) и часто срабатывает.
Именно поэтому мы жёстко задаём следующие случаи и проверяем duplicable?, а не используем этот идиоматичный приём с rescue.
Краткое описание методов экземпляра свернуть
- #blank? ⇒ Boolean приватный
Объект считается пустым, если он равен false, пуст или содержит только пробельные символы.
- #deep_dup ⇒ T.self_type приватный
Возвращает глубокую копию объекта, если его можно дублировать.
- #duplicable? ⇒ Boolean приватный
Можно ли безопасно дублировать этот объект?
- #presence ⇒ T.self_type? приватный
Возвращает получателя, если он присутствует, иначе возвращает
nil. - #present? ⇒ Boolean приватный
Объект считается присутствующим, если он не пуст.
Подробное описание методов экземпляра
#blank? ⇒ Boolean
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Объект считается пустым, если он равен false, пуст или содержит только пробельные символы.
Например, nil, '', ' ', [], {} и false — пустые значения.
Пример
!address || address.empty?
можно упростить до
address.blank?
21 22 23 | # File 'extend/blank.rb', line 21 def blank? respond_to?(:empty?) ? !!T.unsafe(self).empty? : false end |
#deep_dup ⇒ T.self_type
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Возвращает глубокую копию объекта, если его можно дублировать. Если его нельзя дублировать, возвращает self.
object = Object.new
dup = object.deep_dup
dup.instance_variable_set(:@a, 1)
object.instance_variable_defined?(:@a) # => false
dup.instance_variable_defined?(:@a) # => true 17 18 19 | # File 'extend/object/deep_dup.rb', line 17 def deep_dup duplicable? ? dup : self end |
#duplicable? ⇒ Boolean
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Можно ли безопасно дублировать этот объект?
Для объектов методов возвращает false, в остальных случаях — true.
30 | # File 'extend/object/duplicable.rb', line 30 def duplicable? = true |
#presence ⇒ T.self_type?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Возвращает получателя, если он присутствует, иначе возвращает nil.
object.presence эквивалентно object.present? ? object : nil.
Пример
state = params[:state] if params[:state].present?
country = params[:country] if params[:country].present?
region = state || country || 'US'
можно упростить до
region = params[:state].presence || params[:country].presence || 'US'
47 48 49 | # File 'extend/blank.rb', line 47 def presence self if present? end |
#present? ⇒ Boolean
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Объект считается присутствующим, если он не пуст.
27 | # File 'extend/blank.rb', line 27 def present? = !blank? |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Object.html