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

Я добавил тег Java, потому что я очень хорошо знаю этот язык, и, если потребуется, кто-нибудь может привести с ним какую-то аналогию, это не более того :) В любом случае спасибо за помощь




Вы правы, что оператор match будет выполнять только первый совпадающий case, он не будет проверять или выполнять более поздние совпадения (в противном случае case _ будет выполняться всегда).
Здесь нет "обходного пути", потому что это не ошибка или ограничение, это очень полезная функция языка.
Похоже, у вас есть несколько разных trait, каждый из которых имеет разное поведение, и вы хотите выполнить поведение для всех характеристик.
Лучший способ сделать это - написать отдельные функции для сопоставления с каждым признаком (Sum, Var и т. д.) И вызывать их одну за другой в экземпляре Tree. Вы можете создать последовательность из них и использовать foldLeft для применения каждого из них по очереди. Поскольку ваша функция derive возвращает новый экземпляр Tree, вам необходимо четко указать, в каком порядке вы хотите применить операции.
Мне остается неясным, почему у вас есть один объект, который представляет как Var, так и Const, поэтому я подозреваю, что существует более глубокая проблема с вашими структурами данных.
О, код был приведен на их веб-сайте в разделе сопоставления с образцом, и я тоже не понимаю его, поэтому я опубликовал его .... :) Таким образом сопоставление с образцом похоже на оператор switch (Java), в котором случаи ищут только wethere или нет, параметр является экземпляром определенного класса и соответственно выполняет логику. Спасибо вам за помощь
Первая половина вашего вопроса дает ответ. Вторая половина «обходного пути» неясна: если вы хотите сделать несколько вещей, пойти и сделать несколько вещей, вам даже не нужны точки с запятой для этого, просто продолжайте добавлять операторы, пока не закончите. Я не уверен, что должно символизировать изображение кода. Кроме того, действительно ли здесь нужна метка
java?