Класс: 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. По возможности сторонним разработчикам следует избегать использования этого класса, поскольку он может быть удалён или изменён без предупреждения.
Прямые известные подклассы
Краткое описание методов экземпляра свернуть
- #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
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
13 | # File 'extend/blank/hash.rb', line 13 def blank? = empty? |
#compact_blank ⇒ Hash{Hash::K => Hash::V}
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
У #reject есть собственное определение, поэтому для этого метода оно тоже необходимо.
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" 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 } }
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.
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"}}
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"}}
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"}}
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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Изменяет на месте все ключи, применяя операцию блока. Сюда входят ключи корневого хеша, а также всех вложенных хешей и массивов.
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"}}
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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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