Attributes on parameters in functions.

Meta via Digitalmars-d digitalmars-d at puremagic.com
Fri Oct 30 18:02:26 PDT 2015


On Friday, 30 October 2015 at 21:28:09 UTC, TheFlyingFiddle wrote:
> In other languages that have Attributes (Java and C# atleast)
>
> I can do stuff like this: (Java)
>
> //com.bar.java
> interface Bar { /*stuff*/ }
> //com.foo.java
> class Foo
> {
>    Foo(@Bar int a)
>    {
>       //some stuff
>    }
> }
>
>
> I don't seem to be able to do this in D. That is I cannot do 
> this:
>
> enum Bar;
> void foo(@Bar int a) { /* stuff */ }
> //Error: basic type expected, not @
>
> Is there a reason that attributes cannot be used on parameters 
> in functions?
>
> My current use-case for this is that I would like to use UDA's 
> for pattern matching.
>
> auto value = Tuple!(int, "x", int, "y")(1,1);
> value.match!(
>      (@(0,1) int a, @(0,1) int b) => ...,
>      (@isPrime int a, int b) => ...,
>      (@(x => (x % 2)) int a, int b) => ...,
>      (@Bind!"y" int a) => ...);
>
> Basically match to the first lambda if "x" == 0 | 1 and "y" == 
> 0 | 1, to the second if a "x" is prime third if "x" is odd, 
> else explicitly bind "y" to a.
>
> I know I can technically do. Match! or M! instead of the @ 
> symbol to achieve the same effect which is probably what I will 
> end up doing but it would be nice if we could use attributes in 
> function parameters.

Some people wanted it when UDAs were first added to D but Walter 
didn't see any reason to so he didn't.


More information about the Digitalmars-d mailing list