我正在尝试为项目学习一些D并且经常看到诸如的代码
foreach (i; 0 .. 10)
benchmark!test(1)[0]
.to!("msecs", double)
.reverseArgs!writefln
(" took: %.2f miliseconds");
Run Code Online (Sandbox Code Playgroud)
我不确定为什么有些函数调用了!在他们面前,而其他人没有.
好吧,!
在函数反转结果之前,就像if(!a)
.但是!
在函数将它与编译时(模板)参数分开后,就像to!int
.这些参数的括号是可选的,如果它是一个简单的单词,那么就像benchmark!test
或者to!int
,如果它不止于此,它需要像parens这样的parens to!("msecs", double)
.
在很多情况下,传递一个函数reverseArgs!writefln
,就像将模块/ writefln
函数作为编译时参数传递给函数一样reverseArgs
.
所以一般来说:foo!(compile, time, args)(run, time, args)
并非所有功能都有!(compile, time args)
.
那有意义吗?如果不是,我可以尝试编辑......