On Wed, 10 Nov 2010 00:30:55 -0800 Jonathan M Davis <jmdavisp...@gmx.com> wrote:
> On Tuesday 09 November 2010 23:55:26 spir wrote: > > Hello, > > > > Is there a way for a func to hold 2 optional params of the same type? > > void f(int p, bool b1=false, bool b2=false) { > > writefln("p=%s b1=%s b2=%s", p,b1,b2); > > } > > Or is there a workaroud? > > Try compiling it. It works just fine. > > You should be able to have multiple optional parameters, and their types > shouldn't matter. Where you get into trouble is if that function has > overloads > which conflict. Since, in effect, by declaring > > void f(int p, bool b1 = false, bool b2 = false) > > you've declared > > void f(int p, bool b1, bool b2) > void f(int p, bool b1) > void f(int p) Precisely, what a clear exposure of the issue! Sorry, my question was far to imprecise. I cannot have void f(int p, bool b2) {} If I call it with a single bool param, then D logically maps it to b1. In a language with named params, one would simply write f(whatever, b2=true); Is there any workaround? I thought at replacing b2 by a variable external to the func itself. Eg instead void test (args, failure=false, silent=false) {} have SILENT_TEST = false; void test (args, failure=false) {... also use SILENT_TEST ...} But I find the solution a bit weird, it breaks lexical scoping, and forces the user to overwrite a variable in the func's original scope (module). (Is this at all possible: import foo; foo.K = true; I'll try...) > So, trying to declare any of those three separately won't work because your > first > definition covers them all. Right, thank you, Jonathan. > - Jonathan M Davis Denis -- -- -- -- -- -- -- vit esse estrany ☣ spir.wikidot.com