Dlaczego operator inteligentnego dopasowania Perla 5 uważa się za zepsuty? [Zamknięte]


17

Widziałem wiele komentarzy w internecie Operator inteligentnego dopasowywania Perla jest zepsuty . Wiem, że pierwotnie był częścią Perla 6, następnie został zaimplementowany w Perlu 5.10 poza starą wersją specyfikacji, a następnie został poprawiony w wersji 5.10.1, aby pasował do bieżącej specyfikacji Perla 6.

Czy problem został rozwiązany w wersji 5.10.1+, czy też istnieją inne problemy z operatorem smart-match, które sprawiają, że jest on kłopotliwy w praktyce?

Jakie są problemy?

Czy istnieje jeszcze bardziej zaktualizowana wersja (być może Perl 6), która rozwiązuje problemy?

Edycja: Aby wyjaśnić, nie pytam o błędy, ale raczej opinię, że zamierzone zachowanie ~~jest złe.


Czy nie byłoby lepiej na SO?

3
Wygląda więc na to, że nienawidzi pytań, na które obecnie nie można odpowiedzieć za pomocą fragmentów kodu.
Sean McMillan

2
Nie sądzę, że należy do SO, prosi o koncepcyjne wyjaśnienie, dlaczego operator inteligentnego dopasowania Perla jest uważany za zepsuty.
yannis

1
Z tego, co widzę w twoim łączu, wydaje się, że inteligentne dopasowanie jest (lub było) rekurencyjne, więc prawdopodobnie może prowadzić do nieskończonej rekurencji tylko dlatego, że tablica (być może pośrednio) zawiera odniesienie do siebie.
user281377,

2
@SeanMcMillan - SO nienawidzi dziś wielu rzeczy: /
Rook

Odpowiedzi:


14

Ludzie często mylą problemy, które pojawiają się z operatorem smartmatch z tymi, które powstają z given/whenkonstrukcją, takie jak problem leksykalny $_.

Doszedłem do wniosku, że jeśli użyjesz operatora smartmatch tylko do literałów, nie oszalejesz. Nie mogę obiecać żadnej innej sytuacji. Próbowanie rozgryźć, co $a ~~ $bsię dzieje, wystarczy, by doprowadzić porządnego człowieka do szaleństwa krzycząc i zająć się zupełnie innym językiem programowania.

A przynajmniej takie podejście otrzymałem od Larry'ego, gdy redagował sekcję smartmatch czwartej edycji Programming Perl .


4

Operator inteligentnego dopasowania nie był „zepsuty” , ale miał wiele błędów. Perl v5.12 to naprawił, a Perl v5.14 udoskonalił go IMHO. Tak więc, aby odpowiedzieć na twoje pytanie, Perl v5.12 i nowsze rozwiązuje ten problem. Możesz spróbować z późniejszymi wersjami Perla v5.10, ale wiem, że działa lepiej w Perlu 5.12+.

Edycja: aby odpowiedzieć na edycję, zobacz tego bloga . Po przeczytaniu artykułu uważam, że wystarczająco odpowiedział na twoje pytanie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.