Spec-Zone.ru › Homebrew

Класс: Hash Закрытый

Наследует:
Object
  • Object
  • Hash
показать все
Определён в:
extend/hash/keys.rb,
extend/blank/hash.rb,
extend/enumerable/hash.rb,
extend/hash/deep_merge.rb,
extend/object/deep_dup/hash.rb,
extend/hash/deep_transform_values.rb,
extend/hash/keys.rbi,
extend/enumerable.rbi,
extend/hash/deep_merge.rbi,
extend/hash/deep_transform_values.rbi

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

Прямые известные подклассы

Homebrew::Bundle::Brew::Topo, Utils::TopologicalHash

Краткое описание методов экземпляра свернуть

  • #assert_valid_keys(*valid_keys) ⇒ void закрытый

    Проверяет, что все ключи хеша соответствуют *valid_keys; при несовпадении вызывает ArgumentError.

  • #blank? ⇒ Boolean закрытый

    Хеш является пустым, если он не содержит элементов:

  • #compact_blank ⇒ Hash{Hash::K => Hash::V} закрытый

    У #reject есть собственное определение, поэтому этому методу оно тоже необходимо.

  • #deep_dup ⇒ T.self_type закрытый

    Возвращает глубокую копию хеша.

  • #deep_merge(other_hash, &block) ⇒ Hash{Hash::K, T.type_parameter(:K2) => T.untyped} закрытый

    Возвращает новый хеш, в котором self и other_hash объединены рекурсивно.

  • #deep_merge!(other_hash, &block) ⇒ Hash{Hash::K, T.type_parameter(:K2) => T.untyped} закрытый

    То же, что и #deep_merge, но изменяет self.

  • #deep_stringify_keys ⇒ Hash{String => V} закрытый

    Возвращает новый хеш, в котором все ключи преобразованы в строки.

  • #deep_symbolize_keys ⇒ Hash{Symbol => V} закрытый

    Возвращает новый хеш, в котором все ключи преобразованы в символы, если они отвечают на to_sym.

  • #deep_transform_keys(&block) ⇒ Hash{T.type_parameter(:Out) => V} закрытый

    Возвращает новый хеш, в котором все ключи преобразованы с помощью блока.

  • #deep_transform_keys!(&block) ⇒ Hash{T.type_parameter(:Out) => V} закрытый

    Деструктивно преобразует все ключи с помощью блока.

  • #deep_transform_values(&block) ⇒ Hash{Hash::K => T.type_parameter(:Out)} закрытый

    Возвращает новый хеш, в котором все значения преобразованы с помощью блока.

  • #present? ⇒ Boolean закрытый

Подробное описание методов экземпляра

#assert_valid_keys(*valid_keys) ⇒ void

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

Этот метод возвращает неопределённое значение.

Проверяет, что все ключи хеша соответствуют *valid_keys, и вызывает ArgumentError при несовпадении.

Обратите внимание, что ключи обрабатываются иначе, чем HashWithIndifferentAccess: строковые ключи и ключи-символы не совпадают.

Пример#

{ name: 'Rob', years: '28' }.assert_valid_keys(:name, :age)
# => raises "ArgumentError: Unknown key: :years. Valid keys are: :name, :age"
{ name: 'Rob', age: '28' }.assert_valid_keys('name', 'age')
# => raises "ArgumentError: Unknown key: :name. Valid keys are: 'name', 'age'"
{ name: 'Rob', age: '28' }.assert_valid_keys(:name, :age)   # => passes, raises nothing

Параметры:

  • valid_keys (T.untyped)


21
22
23
24
25
26
27
28
29
# File 'extend/hash/keys.rb', line 21

def assert_valid_keys(*valid_keys)
  valid_keys.flatten!
  each_key do |k|
    next if valid_keys.include?(k)

    raise ArgumentError,
          "Unknown key: #{T.unsafe(k).inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(", ")}"
  end
end

#blank? ⇒ Boolean

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

Хеш считается пустым, если он не содержит элементов:

{}.blank?                # => true
{ key: 'value' }.blank?  # => false

Возвращает:

  • (Boolean)


13
# File 'extend/blank/hash.rb', line 13

def blank? = empty?

#compact_blank ⇒ Hash{Hash::K => Hash::V}

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

У #reject есть собственное определение, поэтому для этого метода оно тоже необходимо.

Возвращает:

  • (Hash{Hash::K => Hash::V})


6
# File 'extend/enumerable/hash.rb', line 6

def compact_blank = reject { |_k, v| T.unsafe(v).blank? }

#deep_dup ⇒ T.self_type

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

Возвращает глубокую копию хеша.

hash = { a: { b: 'b' } }
dup  = hash.deep_dup
dup[:a][:c] = 'c'

hash[:a][:c] # => nil
dup[:a][:c]  # => "c"

Возвращает:

  • (T.self_type)


14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'extend/object/deep_dup/hash.rb', line 14

def deep_dup
  hash = dup
  each_pair do |key, value|
    case key
    when ::String, ::Symbol
      hash[key] = T.unsafe(value).deep_dup
    else
      hash.delete(key)
      hash[T.unsafe(key).deep_dup] = T.unsafe(value).deep_dup
    end
  end
  hash
end

#deep_merge(other_hash, &block) ⇒ Hash{Hash::K, T.type_parameter(:K2) => T.untyped}

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

Возвращает новый хеш, рекурсивно объединяющий self и other_hash.

Примеры

h1 = { a: true, b: { c: [1, 2, 3] } }
h2 = { a: false, b: { x: [3, 4, 5] } }

h1.deep_merge(h2) # => { a: false, b: { c: [1, 2, 3], x: [3, 4, 5] } }

Как и в случае с Hash#merge из стандартной библиотеки, для объединения значений можно передать блок:

h1 = { a: 100, b: 200, c: { c1: 100 } }
h2 = { b: 250, c: { c1: 200 } }
h1.deep_merge(h2) { |key, this_val, other_val| this_val + other_val }
# => { a: 100, b: 450, c: { c1: 300 } }

Параметры:

  • other_hash (Hash{T.type_parameter(:K2) => T.untyped})
  • block (T.proc.params(k: T.untyped, v1: T.untyped, v2: T.untyped).returns(T.untyped), nil)

Возвращает:

  • (Hash{Hash::K, T.type_parameter(:K2) => T.untyped})


25
26
27
# File 'extend/hash/deep_merge.rb', line 25

def deep_merge(other_hash, &block)
  dup.deep_merge!(other_hash, &block)
end

#deep_merge!(other_hash, &block) ⇒ Hash{Hash::K, T.type_parameter(:K2) => T.untyped}

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

То же, что и #deep_merge, но изменяет self.

Параметры:

  • other_hash (Hash{T.type_parameter(:K2) => T.untyped})
  • block (T.proc.params(k: T.untyped, v1: T.untyped, v2: T.untyped).returns(T.untyped), nil)

Возвращает:

  • (Hash{Hash::K, T.type_parameter(:K2) => T.untyped})


30
31
32
33
34
35
36
37
38
39
40
# File 'extend/hash/deep_merge.rb', line 30

def deep_merge!(other_hash, &block)
  merge!(other_hash) do |key, this_val, other_val|
    if T.unsafe(this_val).is_a?(Hash) && other_val.is_a?(Hash)
      T.unsafe(this_val).deep_merge(other_val, &block)
    elsif block
      yield(key, this_val, other_val)
    else
      other_val
    end
  end
end

#deep_stringify_keys ⇒ Hash{String => V}

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

Возвращает новый хеш, в котором все ключи преобразованы в строки. Сюда входят ключи корневого хеша, а также всех вложенных хешей и массивов.

Пример

hash = { person: { name: 'Rob', age: '28' } }

hash.deep_stringify_keys
# => {"person"=>{"name"=>"Rob", "age"=>"28"}}

Возвращает:

  • (Hash{String => V})


62
# File 'extend/hash/keys.rb', line 62

def deep_stringify_keys = T.unsafe(self).deep_transform_keys(&:to_s)

#deep_symbolize_keys ⇒ Hash{Symbol => V}

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

Возвращает новый хеш, в котором все ключи преобразованы в символы, если они отвечают на to_sym. Сюда входят ключи корневого хеша, а также всех вложенных хешей и массивов.

Пример

hash = { 'person' => { 'name' => 'Rob', 'age' => '28' } }

hash.deep_symbolize_keys
# => {:person=>{:name=>"Rob", :age=>"28"}}

Возвращает:

  • (Hash{Symbol => V})


76
77
78
79
80
81
82
# File 'extend/hash/keys.rb', line 76

def deep_symbolize_keys
  deep_transform_keys do |key|
    T.unsafe(key).to_sym
  rescue
    key
  end
end

#deep_transform_keys(&block) ⇒ Hash{T.type_parameter(:Out) => V}

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

Возвращает новый хеш, в котором все ключи преобразованы с помощью операции блока. Сюда входят ключи корневого хеша, а также всех вложенных хешей и массивов.

Пример

hash = { person: { name: 'Rob', age: '28' } }

hash.deep_transform_keys{ |key| key.to_s.upcase }
# => {"PERSON"=>{"NAME"=>"Rob", "AGE"=>"28"}}

Параметры:

  • block (T.proc.params(o: K).returns(T.type_parameter(:Out)))

Возвращает:

  • (Hash{T.type_parameter(:Out) => V})


43
# File 'extend/hash/keys.rb', line 43

def deep_transform_keys(&block) = _deep_transform_keys_in_object(self, &block)

#deep_transform_keys!(&block) ⇒ Hash{T.type_parameter(:Out) => V}

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

Изменяет на месте все ключи, применяя операцию блока. Сюда входят ключи корневого хеша, а также всех вложенных хешей и массивов.

Параметры:

  • block (T.proc.params(o: K).returns(T.type_parameter(:Out)))

Возвращает:

  • (Hash{T.type_parameter(:Out) => V})


48
# File 'extend/hash/keys.rb', line 48

def deep_transform_keys!(&block) = _deep_transform_keys_in_object!(self, &block)

#deep_transform_values(&block) ⇒ Hash{Hash::K => T.type_parameter(:Out)}

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

Возвращает новый хеш, в котором все значения преобразованы с помощью операции блока. Сюда входят значения корневого хеша, а также всех вложенных хешей и массивов.

Пример

hash = { person: { name: 'Rob', age: '28' } }

hash.deep_transform_values{ |value| value.to_s.upcase }
# => {person: {name: "ROB", age: "28"}}

Параметры:

  • block (T.proc.params(o: Hash::V).returns(T.type_parameter(:Out)))

Возвращает:

  • (Hash{Hash::K => T.type_parameter(:Out)})


17
# File 'extend/hash/deep_transform_values.rb', line 17

def deep_transform_values(&block) = _deep_transform_values_in_object(self, &block)

#present? ⇒ Boolean

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

Возвращает:

  • (Boolean)


16
# File 'extend/blank/hash.rb', line 16

def present? = !empty? # :nodoc:

© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Hash.html

Spec-Zone.ru

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