我想知道如何更改下面的代码,以便在编译时计算bmBc
。下面的一个适用于运行时,但它并不理想,因为我需要在编译时知道bmBc
表。我可以理解如何改进这方面的建议。
import std.conv:to;
import std.stdio;
int [string] bmBc;
immutable string pattern = "GCAGAGAG";
const int size = to!int(pattern.length);
struct king {
void calculatebmBc(int i)()
{
static if ( i < size -1 )
bmBc[to!string(pattern[i])]=to!int(size-i-1);
// bmBc[pattern[i]] ~= i-1;
calculatebmBc!(i+1)();
}
void calculatebmBc(int i: size-1)() {
}
}
void main(){
king myKing;
const int start = 0;
myKing.calculatebmBc!(start)();
//1. enum bmBcTable = bmBc;
}
答案 0 :(得分:1)
变量bmBc
和bmh
无法在编译时读取,因为您将它们定义为常规运行时变量。
您需要将它们定义为enum
或可能immutable
,以便在编译时读取它们,但这也意味着您无法在初始化后修改它们。您需要重构代码以返回值而不是使用out参数。
或者,您可以在运行时在模块构造函数内初始化它们。