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); };
}