Шаблон соответствия в Скала.Каково поведение, когда параметр проявляет полиморфизм или является дочерним классом: - PullRequest
0 голосов
/ 04 июня 2018

Я новичок в Scala У меня есть небольшой опыт в Java.В разделе соответствия шаблонов своего веб-сайта они упомянули, что при передаче параметра в функцию может быть реализована другая логика, основанная на ссылочном типе параметра.Если так, то каково будет поведение, когда параметр, расширяющий множество классов и интерфейсов, передается в сопоставление с образцом, содержащим все те классы и интерфейсы, которые он реализует?Если реализован только первый класс / интерфейс, что может быть обходным путем для реализации всей логики, связанной со всеми классами / интерфейсами, которые он реализует?

Code from scala website

Ссылка на сайт .

1 Ответ

0 голосов
/ 04 июня 2018

Вы правы, что оператор match будет выполнять только первое совпадение case, он не будет проверять или выполнять более поздние совпадения (в противном случае case _ всегда будет выполняться).

Существуетнет «обходного пути», потому что это не ошибка или ограничение, это очень полезная функция языка.


Звучит так, как будто у вас есть несколько различных trait с.каждый из которых имеет различное поведение, и вы хотите выполнить поведение для всех черт.

Лучший способ сделать это - написать отдельные функции для сопоставления с каждой чертой (Sum Var и т. д.)и вызывайте их один за другим в экземпляре Tree.Вы можете сделать последовательность из них и использовать foldLeft, чтобы применить каждый из них по очереди.Поскольку ваша функция derive возвращает новый экземпляр Tree, вам необходимо четко определить, в каком порядке вы хотите применить операции.

Мне остается неясным, почему у вас есть один объект, который представляет собой Var и Const, поэтому я подозреваю, что есть более глубокая проблема с вашими структурами данных.

...