Spec-Zone.ru › Homebrew

Класс: 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?

Возвращает:

  • (Boolean)


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

Возвращает:

  • (T.self_type)


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.

Возвращает:

  • (Boolean)


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'

Возвращает:

  • (T.self_type, nil)


47
48
49
# File 'extend/blank.rb', line 47

def presence
  self if present?
end

#present? ⇒ Boolean

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Объект считается присутствующим, если он не пуст.

Возвращает:

  • (Boolean)


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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API