Quelle est la différence entre cmpStr
et cmpStrHard
dans FreezeThaw?Quelle est la différence entre cmpStr et cmpStrHard dans FreezeThaw de Perl?
Ils sont mentionnés dans la FAQ How do I test whether two arrays or hashes are equal?
Quelle est la différence entre cmpStr
et cmpStrHard
dans FreezeThaw?Quelle est la différence entre cmpStr et cmpStrHard dans FreezeThaw de Perl?
Ils sont mentionnés dans la FAQ How do I test whether two arrays or hashes are equal?
La documentation est très vague et le code source est difficile à suivre, mais l'exemple dans la FAQ fournit un aperçu. Après avoir étudié chacun d'eux, je pense que je comprends ce que les fonctions font et ce que la documentation signifie.
CmpStr
compare les représentations sérialisées de deux structures de données. Il renvoie 0 s'ils sont équivalents. Il retourne non nul autrement. (Techniquement, il renvoie -1 si la première structure de données est inférieure à la seconde et +1 si elle est supérieure, mais les concepts de "inférieur à" et "supérieur à" ne sont pas particulièrement utiles pour les hachages.)
CmpStrHard
est similaire mais plus stricte. Il renvoie 0 uniquement si les deux structures de données sont exactement les mêmes.
La différence entre l'équivalence et l'égalité réside dans les références utilisées pour construire des structures de données complexes. Considérez ce qui suit:
my ($x, $y, $z);
$x = [1];
$y = [1];
$z = $y;
$x
et $y
sont équivalentes: ils sont les deux références à un tableau qui contient la seule valeur « 1 ». $y
et $z
sont plus qu'équivalents, ils sont égaux: ils sont tous deux des références au même tableau anonyme. Si vous dites
$y->[0] = 2;
alors $x
et $y
ne sera plus équivalent, mais $y
et $z
sera toujours égale. Je crois que lorsque la documentation de FreezeThaw dit "considérée comme un groupe", elle parle de structures de données qui pourraient contenir des références aux mêmes objets. (Et si oui, qu'un cycle de gel/dégel devrait préserver ces relations.)
Est-ce que $ z [0] serait aussi 2? – biznez
Oui, '$ z -> [0]' serait aussi 2, parce que '$ y' et' $ z' sont tous deux des références au même tableau. –
Vous pouvez jeter un oeil à la source: http://cpansearch.perl.org/src/ILYAZ/FreezeThaw-0.45/FreezeThaw.pm Pour moi, 'cmpStr' est intuitif et' cmpStrHard' ne l'est pas (voir l'exemple dans la FAQ que vous mentionnez). –