2009-08-13 4 views

Répondre

6

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.)

+0

Est-ce que $ z [0] serait aussi 2? – biznez

+0

Oui, '$ z -> [0]' serait aussi 2, parce que '$ y' et' $ z' sont tous deux des références au même tableau. –

Questions connexes