reflect on this function
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Feb 20 15:24:53 PST 2015
On 02/20/2015 02:32 PM, Vlad Levenfeld wrote:
> I'd like to do something like this:
>
> @reflexive @transitive bool relation (T)(T a, T b)
> out (result) {
> mixin(property_verification!result);
> }
> body {
> ...
> }
>
> which becomes
>
> out (result) {
> // generated from @reflexive
> assert (result == skip_contract!relation (b,a));
>
> // generated from @transitive
> static typeof(result) c;
> if (result)
> assert (skip_contract!relation (b,c) == skip_contract!relation
> (a,c));
> c = b;
> }
>
> or something like that. I don't see a way to get exactly this, but does
> anyone have any thoughts on something similar?
Apparently, __FUNCTION__ is valid in an out block:
import std.stdio;
import std.string;
struct reflexive
{}
struct transitive
{}
string property_verification(alias var)(string func = __FUNCTION__)
{
return format(
`writefln("We are in %s; and the value of '%s' is '%%s'.", %s);`,
func, var.stringof, var.stringof);
}
@reflexive @transitive bool relation (T)(T a, T b)
out (result) {
mixin(property_verification!result);
} body {
return false;
}
void main()
{
int a, b;
relation(a, b);
}
The output printed inside the out block:
We are in deneme.relation!int.relation; and the value of 'result' is
'false'.
Ali
More information about the Digitalmars-d-learn
mailing list