d的静态模板,启动时初化
Regex!char staticRe(string reStr)()
{
static struct Impl
{
static Regex!char re;
static this()
{
re = regex(reStr);
}
}
return Impl.re;
}
auto myFunc(string input) {
...
auto result = input.replaceAll(staticRe!"foo(\w+)bar", `blah $1 bleh`);
...
}
带编译时参数的模板函数,运行时返回全局初化正则,当作模板实例化.不用ct正则无编译时开销,是在程序启动时实例化.
等价于全局变量.但我们不能从模板函数把全局变量注入模块域,在模板函数中用一个包装构.同时避开编译时生成全局变量.
静态字段,像全局变量.为保证启动实例化.用静 this ()在main前运行.
class Language { ... }
Language curLang = ...;
version(extractStrings) {
private int[string] translatableStrings;
string[] getTranslatableStrings() {
return translatableStrings.keys;
}
}
string gettext(string str)() {
version(extractStrings) {
static struct StrInjector {
static this() {
translatableStrings[str]++;
}
}
}
return curLang.translate(str);
}
...
auto myFunc() {
...
writeln(gettext!"Some translatable message");
...
}
d版本的gettext,同样.
uniapp的缺点,可能是要上传一份代码吧.
浙公网安备 33010602011771号