Question Qu'est-ce que "stringification" en Perl?


Dans la documentation du module CPAN DateTime J'ai trouvé ce qui suit:

Une fois le formateur défini, le   méthode de cordification surchargée sera   utilisez le formateur.

Il semble qu'il y ait un concept Perl appelé "stringification" que j'ai manqué en quelque sorte. Googling ne l'a pas beaucoup clarifié. Quelle est cette "stringification"?


23
2018-03-07 00:24


origine


Réponses:


"stringification" se produit chaque fois que perl a besoin de convertir une valeur en chaîne. Cela pourrait être de l'imprimer, de le concaténer avec une autre chaîne, de lui appliquer une regex ou d'utiliser l'une des autres fonctions de manipulation de chaîne de Perl.

say $obj;
say "object is: $obj";
if ($obj =~ /xyz/) {...}
say join ', ' => $obj, $obj2, $obj3;
if (length $obj > 10) {...}
$hash{$obj}++;
...

Normalement, les objets vont se limiter à quelque chose comme Some::Package=HASH(0x467fbc) où perl imprime le paquet dans lequel il est béni, ainsi que le type et l'adresse de la référence.

Certains modules choisissent de remplacer ce comportement. En Perl, cela se fait avec le surcharge pragma. Voici un exemple d'objet qui, lorsqu'il est stratifié, produit sa somme:

{package Sum;
    use List::Util ();

    sub new {my $class = shift; bless [@_] => $class}

    use overload fallback => 1,
        '""' => sub {List::Util::sum @{$_[0]}}; 

    sub add {push @{$_[0]}, @_[1 .. $#_]}
}

my $sum = Sum->new(1 .. 10);

say ref $sum; # prints 'Sum'
say $sum;     # prints '55'
$sum->add(100, 1000);
say $sum;     # prints '1155'

Il y a plusieurs autres ifications qui overload vous permet de définir:

'bool' Boolification    The value in boolean context   `if ($obj) {...}`
'""'   Stringification  The value in string context    `say $obj; length $obj`
'0+'   Numification     The value in numeric context   `say $obj + 1;`
'qr'   Regexification   The value when used as a regex `if ($str =~ /$obj/)`

Les objets peuvent même se comporter comme différents types:

'${}'   Scalarification   The value as a scalar ref `say $$obj`
'@{}'   Arrayification    The value as an array ref `say for @$obj;`
'%{}'   Hashification     The value as a hash ref   `say for keys %$obj;`
'&{}'   Codeification     The value as a code ref   `say $obj->(1, 2, 3);`
'*{}'   Globification     The value as a glob ref   `say *$obj;`

48
2018-03-07 00:53



Les méthodes de cordification sont appelées lorsqu'un objet est utilisé dans un contexte où une chaîne est attendue. La méthode décrit comment représenter l'objet en tant que chaîne. Donc, par exemple, si vous dites print object; alors, puisque print attend une chaîne, elle transmet le résultat de la méthode stringify à l'impression.


7
2018-03-07 00:28



Juste en ajoutant à la réponse ci-dessus, dessiner une analogie avec java ...

Beaucoup similaire à Object.toString () en Java. Omni-présent par défaut, mais peut être remplacé si nécessaire.


1
2018-03-07 14:42