Как я могу построить массив регулярных выражений stati c в D? - PullRequest
0 голосов
/ 18 января 2020

У меня есть несколько регулярных выражений, которые нужно применять подряд. Например:

import std.regex;

auto ctrex1 = ctRegex!(`def\s\n`);
auto ctrex2 = ctRegex!(`func\(`);

Я бы хотел обернуть их в массив и использовать в качестве аргумента функции.

StaticRegex!char[] staticRegexes = [ctrex1, ctrex2];

Однако это не работает и компилятор выдает

Error: static variable ctrex1 cannot be read at compile time

Я наивно понимаю, что после того, как компилятор читает и компилирует ctrex1 и ctrex2, у него не должно быть проблем с компиляцией массива для этих объекты позже ниже. Предполагая, что он просто читает заявления сверху вниз. Но, похоже, мое понимание неверно. Как работает компилятор в этом случае и как мне создать массив регулярных выражений c?

1 Ответ

2 голосов
/ 18 января 2020

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

Вместо этого вы могли бы иметь кортеж объектов регулярных выражений во время компиляции или добавить уровень косвенности и обернуть каждый в единый делегат, который затем вызывает средство сопоставления объекта регулярного выражения во время компиляции.

...