63 votes

Perl 5.20 et le sort de l'appariement intelligent et donné-quand?

Je viens d'installer Perl 5.18, et je reçois beaucoup de mises en garde de ce genre,

given is experimental at .\[...].pl line [...].
when is experimental at .\[...].pl line [...].
Smartmatch is experimental at C:/strawberry/perl/site/lib/[...] line [...].

La recherche dans ces mises en garde, ce que je n'ai jamais entendu parler de n'importe où -- je n'ai pu trouver dans deux endroits,

Le Perl Delta n'est toujours le plus à donner de mentionner à ce qui se passe avec ces fonctionnalités, il est à moitié enterré dans le pod,

Smart match, a ajouté v5.10.0 et largement révisé à la v5.10.1, a été un point régulier de la plainte. Bien qu'il existe un certain nombre de façons dont il est utile, il s'est aussi avéré problématique et source de confusion pour les utilisateurs et développeurs de Perl. Il y a eu un certain nombre de propositions sur la meilleure façon d'aborder le problème. Il est clair que smartmatch est presque certainement va changer ou disparaître dans l'avenir. En s'appuyant sur son comportement actuel n'est pas recommandé. Avertissements va maintenant être émis lorsque l'analyseur voit ~~, donné, ou lorsqu'.

Je suis confus sur la façon dont le changement le plus important en Perl dans les 10 dernières années pourrait être tiré. J'ai commencé à utiliser given, when, et smartmatch tous sur la place. Est-il plus d'informations sur ces contrats à terme? Comment est ce que quelqu'un à les trouver "confusion?" Comment sont ces caractéristiques susceptibles de changement? Est-il prévu d'implémenter ces fonctionnalités avec un module?

37voto

ikegami Points 133140

Il y a des problèmes avec la conception de smart-matching. La décision de ce que tout TYPE ~~ TYPE devez faire est le plus souvent évident, incohérente et/ou de contestation. L'idée n'est pas de supprimer smart matching; c'est pour le fixer.

Plus précisément, ~~ sera grandement simplifiée, comme vous pouvez le voir dans une proposition par le 5.18 pumpking. Les décisions quant à la façon de deux choses devrait correspondre à ce qui va être fait avec les aides, tels que ceux qui existent déjà en Intelligents::Match.

... ~~ any(...)

Beaucoup plus lisible, beaucoup plus souple (entièrement extensible), et résout un certain nombre de problèmes (tels que "Quand dois-X être considéré comme un nombre, et quand doit-il être considéré comme une chaîne de caractères?").

21voto

Joel Berger Points 14203

Certaines idées peuvent être acquises par la lecture de rjbs les modifications proposées smartmatch. Il est le pumpking (Perl, responsable de publication) après tout, de sorte que ses commentaires et sa vision de l'avenir est plus pertinente que la plupart. Il y a aussi beaucoup de commentaires de la communauté sur la question, voir ici par exemple. Le statut "expérimental" est en effet parce que, puisque les choses sont susceptibles de changer dans le futur, il est responsable d'informer les utilisateurs de ce fait, même si nous ne savons pas ce que ces changements seront.

10voto

raina77ow Points 45965

Eh bien, c'est ce qui est dit dans la description du patch qui déclassé cet ensemble de fonctionnalités expérimentales:

Le comportement des/quand/~~ sont susceptibles de changer en perl 5.20.0: smart match sera supprimée ou allégée. À la lumière de cela, les utilisateurs de ces caractéristiques doivent être mis en garde. Une catégorie "expérimentale::smartmatch" avertissement doit être émis pour ces caractéristiques quand ils sont utilisés.

Donc pr en effet, vous pouvez transformer ces avertissements, avec quelque chose comme ceci (source):

no if $] >= 5.018, warnings => "experimental::smartmatch";

... c'est juste tourner vos yeux sur le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X