main()可有string[]
参数
可用std.getopt
取命令.
import std.stdio;
import std.getopt;
import std.random;
void main(string[] args) {
int count;
int minimum;
int maximum;
getopt(args,"count", &count,"minimum", &minimum,"maximum", &maximum);
//可改进如下.
getopt(args,"count|c", &count,"minimum|n", &minimum,"maximum|x", &maximum);
//即-c 等价于--count
foreach (i; 0 .. count) {
write(uniform(minimum, maximum + 1), ' ');
}
writeln();
}
取环境变量.
import std.stdio;
import std.process;//访问环境变量
void main() {
writeln(environment["PATH"]);
}
将之转为aa
string[string] envVars = environment.toAA();
启动其他函数,类似c++的系统
,py
的os.system
.
import std.stdio;
import std.process;//执行命令
void main() {
const result = executeShell("ls -l deneme");
//执行壳命令.
const returnCode = result[0];
const output = result[1];
writefln("ls 返回 %s.", returnCode);
writefln("输出:\n%s", output);
}
main
虽然是void
,返回的也是成功为0,失败为非0
.
import std.stdio;
int main(string[] args) {
if (args.length != 3) {
stderr.writefln("错误! 正确用法:\n" ~"%s 词1 词2", args[0]);
return 1;
}
writeln(args[2], ' ', args[1]);
return 0;
}
stderr,类似stdout
,都输出在控制台
.
异常,没啥看头,不喜欢.try-catch-finally
.出错就重新改.scope
语句,三个:
scope(exit,成功,失败),后两个成功或失败后执行.第一个退出域时则执行.失败指出现异常.可以写成块.其实就是函数版的析构函数
断定(logical_expression);
断定(logical_expression,message);
//上面为语法.断定必须成立,否则运行失败
double averageAge(double first, double second) {
assert(first >= 0);
assert(second >= 0);
return (first + second) / 2;
}
void main() {
auto result = averageAge(-1, 10);
}
//下面是未达分支,或无效分支.
} else {
assert(false);//到达这里,就是失败.
}
static assert
编译时必须成立的断定
.这相当于说是前提条件
.没有前提条件
,程序就可以退出了.断定
在单元测试/合同编程
中很重要.-release
开关,会在发布版本中删掉断定
.而断定(假)
的地方不会删除.表示不可达
.enforce
确保抛
异常.如果不满足条件,就抛.不能完成任务
,就抛异常.
异常是错误,但不是所有错误都是异常.
异常是可以恢复
的错误.经过处理
后就正常了.