跳过 D 中的默认参数

Skip a default parameter in D

我正在经历 D language tour and when I got to Functions 开始想知道是否有一种方法可以在调用函数时跳过默认参数,例如:

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 ','
}

我已经看过 ,所以我知道您不能按名称传递参数,除此之外找不到任何提及此类功能的信息,所以询问只是为了确保我没有遗漏任何内容,并且在互联网上的某个地方有明确的答案。

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

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

import std.traits;

...

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