У меня есть следующий хэш:
my %villains = {
"Boba" => "Fett",
"Darth" => "Vader",
"Moff" => "Tarkin",
}
Затем я печатаю его так:
print "".%villains;
Я получаю следующий вывод:
1/8
Какая семантика в Perl делает это?
Спасибо!
У меня есть следующий хэш:
my %villains = {
"Boba" => "Fett",
"Darth" => "Vader",
"Moff" => "Tarkin",
}
Затем я печатаю его так:
print "".%villains;
Я получаю следующий вывод:
1/8
Какая семантика в Perl делает это?
Спасибо!
Вы оцениваете хэш в скалярном контексте. Когда вы это делаете, он фактически возвращает часть количества ковшей, затронутых общим количеством ведер, если хеш не был использован, и в этом случае он вычисляет значение false. См. этот perldoc для получения дополнительной информации (в конце раздела).
Это может использовать некоторые объяснения для всех, кто не знаком с внутренними элементами хэша: когда элементы добавляются в хэш, они группируются в ведра на основе алгоритма хеширования, чтобы их можно было получить более эффективно.
Ты собираешь игрушечные машины. Чтобы легко найти ваши автомобили, вы решили поместить их в разные ковши по цвету. У вас есть ведра для цветных автомобилей Красный, Желтый, Зеленый, Синий и Черный..
Вы добавляете новый зеленый Ford Mustang в свою коллекцию, чтобы он попал в ведро Зеленая. В следующий раз, когда вы захотите найти этот автомобиль, вы можете перейти непосредственно в ковш Зеленый и выбрать меньший выбор для поиска.
В этом примере коллекция автомобилей - hash
, каждый автомобиль - hash entry
, а цвет - hashing algorithm
. Поскольку коллекция также содержит красные, синие и черные автомобили, они устроены достаточно эффективно, используя 4/5
ведер.
Однако, если бы вы использовали эту систему для коллекции красных автомобилей, алгоритм хеширования был бы очень неэффективным. Он использовал бы только 1/5
ведер, и поиск конкретного автомобиля включал бы поиск по всей коллекции.