import std;
void main()
{
static foreach(Foo; ["Abc", "def"]) {{
string str = Foo;
writeln("Hello D ", str, __VERSION__);
}}
}
//输出
Hello D Abc2098
Hello D def2098
工作
的,AliasAssign
与{{/}}
无关,该技巧与() { ... }
闭包类似.
亚当:static foreach
是迭代编译时值
,特殊在于可在函数外(及内部)
使用.在函数外
不能用函数内合法
的东西,因而仅是些声明
,而无嵌套域/表达式
.
函数外,静断{{ }}
是非法的,因为{}
在函数外是非法
的,而在函数内
,则是合法的,{}
用来表示域
语句.
void test() {
int a;
{ // 域语句
int b;
}
// a存在,b已完蛋.
static foreach(...)
stuff; // {}省略了
static foreach(...) {
stuff; // 同上
}
// 两个{}
static foreach(...) { //可选{}
{ // 域语句之一
int b;
}
}
}
别名赋值
与此无关,它是用未访问
的声明来覆盖另一个,给你编译时修改的错觉.
ag0aep6g:{ ... }
与() { ... }
不一样,后者不是闭包,也不一定包含闭包.
//只是个域
import std.stdio;
void main()
{
{
string str = "Abc";
writeln("Hello D ", str, 2098L);
}
}
//立即调用的函数字面
import std.stdio;
void main()
{
() {
string str = "Abc";
writeln("Hello D ", str, 2098L);
} ();
}
//返回闭包.
import std.stdio;
void main() { f("Abc")(); }
auto f(string str)
{
return { writeln("Hello D ", str, 2098L); };
}