D语言:无法在编译时读取变量s

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

嗨,我在尝试编译一个非常简单的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("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