D语言:无法在编译时读取变量s
嗨,我在尝试编译一个非常简单的D程序时遇到了这个问题:D语言:无法在编译时读取变量s,d,D,嗨,我在尝试编译一个非常简单的D程序时遇到了这个问题: #!/usr/bin/env rdmd import std.uni; import std.random : randomSample; import std.stdio; import std.conv; /** * Random salt generator */ auto get_salt(uint s) { auto unicodechars = unicode("Cyrillic") | unicode("Armen
#!/usr/bin/env rdmd
import std.uni;
import std.random : randomSample;
import std.stdio;
import std.conv;
/**
* Random salt generator
*/
auto get_salt(uint s)
{
auto unicodechars = unicode("Cyrillic") | unicode("Armenian") | unicode("Chinese");
dchar[] unichars = to!(dchar[])(unicodechars);
dchar[s] salt;
salt = randomSample(unichars, s);
return salt;
}
void main()
{
writeln("Random salt");
writeln(get_salt(32));
}
我发现以下编译错误:
$ ./teste.d
./teste.d(13): Error: variable s cannot be read at compile time
Failed: ["dmd", "-v", "-o-", "./teste.d", "-I."]
@下面是C-Otto的回答,回答问题。但是,由于代码中还有其他错误,我将其放在简化的工作版本下面:
auto get_salt(uint s)
{
auto unicodechars = unicode("Cyrillic") | unicode("Armenian") | unicode("Telugu");
dstring unichars = to!(dstring)(unicodechars);
return randomSample(unichars, s);
}
void main()
{
writeln("Random salt:");
writeln(get_salt(32));
}
您将
salt
数组的长度定义为s
(所谓的“静态数组”)。这些信息需要在编译时可用。但是,只有在运行时,当您调用该方法并提供名为s
的参数时,该信息才可用
您可以尝试在没有特定大小的情况下定义数组,并在运行时创建它(“动态数组”),类似于上面一行中的
unichars
。对于您的特定情况,您根本不需要变量salt
。。。您可以返回随机样本(unichars,s)代码>谢谢C-Otto。我已经用修改后的代码更新了我的问题,以便更好地帮助其他对此感兴趣的人。唯一困扰我的是,最后的writeln没有将字符打印到控制台,而是一些数字(代码点?):Ii(cc([111,11 3,11 4 6 1 25