Tout d'abord, examinons le code source permettant d'obtenir la longueur d'une table Lua (ltable.c)
j est la longueur de la partie tableau. Tout d'abord, si la longueur du tableau est supérieure à 0 et que le dernier élément du tableau est nil, utilisez la recherche binaire pour trouver et renvoyer la longueur.
Si t->node stocke la partie hachage de la table, et si elle est vide, renvoyer la longueur du tableau.
Premier exemple :
Dans ce cas, la longueur du tableau est initialisée, et la longueur de t est 7. Pourquoi ? Parce que le dernier élément n'est pas nil.
Dans le cas suivant, la longueur de t est 5.
Deuxième exemple :
Tout le monde devrait savoir que la longueur de t est 5.
Dans ce cas, quelle est la longueur de t???
La réponse est 2. Pourquoi ?
L'insertion de t
t
Ensuite, il entrera dans (lvm.c)
Ensuite, il appellera la fonction luaH_newkey dans (ltable.c)
Ensuite, il appelle rehash
Cette partie est en fait le calcul de la partie tableau et de ce qui va dans la partie hachage. nums est la répartition des statistiques. Si vous regardez attentivement le code, vous saurez que la longueur du tableau est 2 à la puissance n.
Ici, nil n'est pas un nombre et n'est pas inclus dans les statistiques, donc 1, 2, 5 et 6 calculeront la longueur du tableau comme 4, et le reste sera placé dans la partie nœud.
Une table est composée d'un tableau et d'une partie de hachage node.
Ainsi, selon la fonction que nous avons examinée plus tôt, le quatrième est nil, donc la longueur trouvée en utilisant la recherche binaire est 2.
C'est un piège qui peut être causé s'il y a nil dans un tableau Lua. Bien sûr, il n'est causé que par rehash.
Adresse originale : https://www.cnblogs.com/wallini/p/4188499.html