2017-08-26 2 views
0

Ich werde durch die D language tour und als ich Functions bekam begann mich gefragt, ob es einen Weg gibt einen Standardparameter zu überspringen, wenn Sie eine Funktion aufrufen, zB .:einen Standardparameter in 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 ',' 
} 

I‘ Ich habe schon How to enter by-name argument to a function in D? angeschaut, also weiß ich, dass man Parameter nicht mit Namen weitergeben kann und ansonsten keine Erwähnung einer solchen Funktion finden kann, also frag einfach, ob ich nichts verpasst habe und es gibt eine klare Antwort irgendwo im Internet.

Wenn es nicht möglich ist, die Übergabe eines Parameters zu überspringen, wenn ein Standardwert verfügbar ist, wie empfiehlt es sich, doppelte Werte zu vermeiden?

+0

D keine benannten Argumente hat. Ich denke, Sie könnten eine Lösung finden, die alle Unterfunktionen erzeugt, aber für den Moment ist es die übliche Lösung, eine Struktur zu übergeben. Auf lange Sicht könnte dieser DIP für Sie interessant sein: https://github.com/dlang/DIPs/pull/71 – greenify

Antwort

0

Sie können kein Argument überspringen, aber wenn Sie wissen, dass es eine Standard hat, können Sie automatisch, dass die Standard-Versorgung:

import std.traits; 

...

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