什么"!" 在D中的函数之前

Kur*_*mer 2 d

我正在尝试为项目学习一些D并且经常看到诸如的代码

    foreach (i; 0 .. 10)
        benchmark!test(1)[0]
            .to!("msecs", double)
            .reverseArgs!writefln
                (" took: %.2f miliseconds");
Run Code Online (Sandbox Code Playgroud)

我不确定为什么有些函数调用了!在他们面前,而其他人没有.

Ada*_*ppe 8

好吧,!在函数反转结果之前,就像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).

那有意义吗?如果不是,我可以尝试编辑......