我有几个正则表达式需要连续应用。例如:
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
之后,下面为这些对象编译一个数组应该没有问题。假设它只是从上到下读取语句。但是看来我的理解是错误的。在这种情况下,编译器如何工作?如何构造静态正则表达式数组?
您不能有一个编译时正则表达式对象数组,因为数组的所有值都必须具有相同的类型,但是编译时正则表达式将表达式字符串作为其类型的一部分。
您可以改用一个元组的编译时正则表达式对象,或者添加一个间接级别并将其包装到一个统一的委托中,然后该委托将调用编译时正则表达式对象的匹配器。