如何在D中构造静态正则表达式数组?

问题描述 投票:0回答:1

我有几个正则表达式需要连续应用。例如:

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

我的天真理解是,在编译器读取并编译ctrex1ctrex2之后,下面为这些对象编译一个数组应该没有问题。假设它只是从上到下读取语句。但是看来我的理解是错误的。在这种情况下,编译器如何工作?如何构造静态正则表达式数组?

d
1个回答
0
投票

您不能有一个编译时正则表达式对象数组,因为数组的所有值都必须具有相同的类型,但是编译时正则表达式将表达式字符串作为其类型的一部分。

您可以改用一个元组的编译时正则表达式对象,或者添加一个间接级别并将其包装到一个统一的委托中,然后该委托将调用编译时正则表达式对象的匹配器。

© www.soinside.com 2019 - 2024. All rights reserved.