В scala эта операция часто не называется шаблоном посетителя. В целом, функциональные конструкции, а не шаблоны GOF, используются для различных служебных задач, таких как работа с коллекцией или около того, благодаря модным библиотекам, таким как cats
или scalaZ
. Есть Functor
, которая дает вам возможность отобразить структуры данных, а также есть абстракция Monad
, которая добавляет создание структуры данных и операцию flatMap
. Таким образом, карта операций с полученным типом блока будет действовать так же, как и «посетитель».
def map[A,B](tree: BinaryTree[A], f: A => B)
Generi c способ реализации map для ADT - рекурсия с исчерпанием регистра ценность. и вы также можете добавить некоторую безопасность стека, настраивая это на хвостовую рекурсию, как описано в этом вопросе:
Как сделать отображение дерева хвостовым рекурсивным?
Вы можете также создайте экземпляры для классов типов кошек, чтобы использовать синтаксис кошек и абстрагироваться над этой конкретной структурой данных.