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