2017-08-26 35 views
0

我经历了D language tour,当我到Functions开始怀疑是否有调用一个函数,例如:跳过在d默认的参数

import std.stdio; 

void greet(string greeting = "Hello", string subject = "World") 
{ 
    writefln("%s %s", greeting, subject); 
} 

void main() 
{ 
    greet(); 
    greet("Howdy"); 
    greet("Hello", "D"); // duplicating default "Hello" 
    // greet(, "D");  // Error: expression expected, not ',' 
} 

我当是跳过默认参数的方式我已经看过How to enter by-name argument to a function in D?,所以我知道你不能通过名字传递参数,除此之外找不到任何提及这样的功能,所以要求确保我没有错过任何东西,并且有明确的答案在互联网上的某个地方。

如果在默认值可用时不能跳过传递参数,那么避免重复默认值的最佳做法是什么?

+0

d没有命名的参数。我想你可以想出一个解决方案来生成所有的子函数,但现在常见的解决方案是传入一个结构体。从长远来看,这个DIP可能对你很有趣:https://github.com/dlang/DIPs/pull/71 – greenify

回答

0

您不能跳过一个参数,但如果你知道它有一个默认值,可以自动提供该默认:

import std.traits; 

...

greet(ParameterDefaults!greet[0], "D");