Jakie są kluczowe różnice między dopasowaniem wzorców w tych dwóch językach? Nie odnoszę się do składni, ale możliwości, szczegółów implementacji, zakresu przypadków użycia i konieczności.
Aplikacje Scala (np. Lift and Play) mówią z dumą o sprawności dopasowywania wzorców języków. Z drugiej strony Clojure ma bibliotekę, core.match i wbudowaną funkcję destrukcji, która również wydaje się potężna.
* Uwaga: Inspiracją do zadania tego pytania jest blog, w którym widziałem, w którym programista w ramach eksperymentu zbudował interpretera seplenienia przy użyciu Scali i Clojure. Powiedział, że mecze Clojure zepsuły się po pewnym czasie, ale nie mógł wyjaśnić, dlaczego, ale jestem naprawdę ciekawy, aby wiedzieć. Ten post można znaleźć tutaj: http://www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html
Odpowiedzi:
W tym filmie, który ostatnio oglądałem, Rich Hickey komentuje, że podoba mu się destrukcyjna część języków takich jak Scala, ale nie tak bardzo część pasująca do wzorca i odpowiednio zaprojektował Clojure. To prawdopodobnie tłumaczy, dlaczego dopasowanie wzorców jest w bibliotece i nie jest tak niezawodne, chociaż problemy, o których wspomniałeś we wpisie, są wyraźnie błędne.
To, co Rich Hickey wymienia jako alternatywę dla dopasowywania wzorców, to multimetody . Większość języków umożliwia wysyłanie polimorficzne w zależności od typu. Niektóre języki pozwalają to również robić na podstawie wartości. Korzystając z wielu metod, Clojure pozwala to zrobić na podstawie dowolnej dowolnej funkcji. To dość potężna koncepcja.
Sprowadza się to do zasady, że programiści używający języka powinni używać jego najlepszych idiomów. Próba napisania kodu podobnego do Scali w Clojure będzie miała trudności i na odwrót.
źródło