Хэш просто связывает ключ объекты с значением объектов. Ключи и значения могут быть любыми.
Если объект value сам по себе является хешем, вы можете назвать его «вложенным хешем», поскольку в некотором смысле он находится внутри основного хеша.
Если объект key является массивом, то вы получите «хэш с массивом в качестве ключа».
Если объект key сам по себе является хешем, то вы получите «хеш с хешем в качестве ключа».
См. Ответ Амфэна для хорошего визуального представления этих различных случаев.
Вы должны быть немного знакомы с синтаксисом Ruby, чтобы определить различные случаи, когда вы их видите.
Например, чтобы понять @cached[[key, prefix, name, partial]]
, вам нужно знать, что [key, prefix, name, partial]
представляет массив, поэтому то, что у вас есть, похоже на @cached[array]
, что означает, что массив используется в качестве ключа.
Когда вы видите что-то вроде @cached[key][prefix]
, вы должны знать, что оно эквивалентно (@cached[key])[prefix]
, поэтому объект значения (@cached[key]
) - это некий объект, который реагирует на метод []
. В данном случае это вложенный хеш, потому что автор сказал вам об этом, но если вы не знали этого контекста, то возможно, что он был чем-то другим.
Когда вы видите что-то вроде @cached[:key => key, :prefix => prefix, :name => name, :partial => partial]
, вы должны знать, что это эквивалентно @cached[{:key => key, :prefix => prefix, :name => name, :partial => partial}]
, что означает, что мы используем хеш в качестве ключа.