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

Reply via email to