#c# #visitor-pattern
#c# #посетитель-шаблон
Вопрос:
У меня есть шаблон посетителя в C #, где я хочу иметь возможность передавать данные между узлами. Например, Visit(FunctionDeclStatement functionDeclStatement)
вызывает functionDeclStatement.Body.Accept(this)
и должен иметь возможность передавать данные функции посещения для functionDeclStatement.Body
. Каков хороший способ сделать это? Я полагаю, я мог бы добавить параметры к функциям посещения, но это было бы довольно беспорядочно.
Ответ №1:
Я не думаю, что шаблон посетителя — это правильный путь:
Шаблон посетителя используется, когда:
-
Аналогичные операции должны выполняться над объектами разных типов, сгруппированными в структуру (коллекцию или более сложную структуру).
-
Необходимо выполнить множество различных и не связанных между собой операций.
Вы нарушаете вторую причину, создавая зависимость между элементами
Комментарии:
1. Есть идеи, что я мог бы сделать вместо этого, для прохождения AST?
2. Возможно, создайте его как композит и вызывайте каждый узел из предыдущего.
3. Хм, мне нужно пройти по абстрактному синтаксическому дереву. Шаблон посетителя обычно является способом перехода к шагающим АСТ.
4. Вы можете обойти его и вернуть некоторое значение из функции visit, а затем сопоставить их снаружи, например, с посетителем деревьев выражений, который создает sql в entity framework.