Передача данных между узлами в шаблоне посетителей

#c# #visitor-pattern

#c# #посетитель-шаблон

Вопрос:

У меня есть шаблон посетителя в C #, где я хочу иметь возможность передавать данные между узлами. Например, Visit(FunctionDeclStatement functionDeclStatement) вызывает functionDeclStatement.Body.Accept(this) и должен иметь возможность передавать данные функции посещения для functionDeclStatement.Body . Каков хороший способ сделать это? Я полагаю, я мог бы добавить параметры к функциям посещения, но это было бы довольно беспорядочно.

Ответ №1:

Я не думаю, что шаблон посетителя — это правильный путь:

Шаблон посетителя используется, когда:

  1. Аналогичные операции должны выполняться над объектами разных типов, сгруппированными в структуру (коллекцию или более сложную структуру).

  2. Необходимо выполнить множество различных и не связанных между собой операций.

Вы нарушаете вторую причину, создавая зависимость между элементами

Комментарии:

1. Есть идеи, что я мог бы сделать вместо этого, для прохождения AST?

2. Возможно, создайте его как композит и вызывайте каждый узел из предыдущего.

3. Хм, мне нужно пройти по абстрактному синтаксическому дереву. Шаблон посетителя обычно является способом перехода к шагающим АСТ.

4. Вы можете обойти его и вернуть некоторое значение из функции visit, а затем сопоставить их снаружи, например, с посетителем деревьев выражений, который создает sql в entity framework.