2017-08-26 44 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");