newbie question: Can D do this?
clk
clk at clksoft.com
Thu Dec 22 07:37:17 PST 2011
Philippe,
Thank you very much for your response. It looks similar to what I've
done in javascript by wrapping all function arguments into a single
object literal but the D alternative you propose is a little to
convoluted for a beginner like me. Perhaps I'll understand it better
after I'm done reading the D book.
To bad D doesn't support passing arguments by name. It makes code so
much easier to read, especially in large projects. Even Fortran allows it.
-clk
(Christian Keppenne)
> On 20/12/2011 14:18, clk wrote:
I remember a discussion about year ago or so.
It seems doable to have some kind of function transformer (adaptor?) for this.
from:
int foo(int a = 0, int b = 1, double c = 0.0, bool d = false) { return 1;}
alias namedParams!foo nfoo; // transform it into a called-by-name function.
nfoo(["d": true]); // a = 0, b = 1, c = 0.0, d = true
nfoo(["d" : true], ["b" : 100]); // a=0, b=100, c=0.0, d=true
nfoo(1, 2, ["d" : true]); // a=1, b=2, c=0.0, d=true
That is, it expects some values, then string/values couples as
associative arrays.
Would that be palatable? Because I think it's doable.
To obtain the arguments names:
int foo(int a, int b, double c = 0.0, bool d = true) { return 1;}
template Name(alias foo) if (isCallable!foo)
{
enum string Name = S!(foo.stringof);
}
template S(string s) // this template is just a trick because
foo.stringof directly displeases DMD
{
enum string S = s;
}
writeln(Name!foo); // "int(int a, int b, double c = 0, bool d = true)"
So this gives us:
- the arguments names
- which ones have default values
- what is that default value
The difficulty here is correctly parsing the ( ,,,) part, without
getting desoriented by argument types that themselves use (,), like
templated types.
I think that would make for an small& interesting community challenge.
Philippe
>
> End of Digitalmars-d-learn Digest, Vol 71, Issue 34
> ***************************************************
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20111222/cd929a83/attachment.html>
More information about the Digitalmars-d-learn
mailing list