www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Strange expression found in std.variant

reply Francis Nixon <13nixonf gmail.com> writes:
When looking at std.variant I found the following line:
return q{
     static if (allowed!%1$s && T.allowed!%1$s)
          if (convertsTo!%1$s && other.convertsTo!%1$s)
              return VariantN(get!%1$s %2$s other.get!%1$s);
}.format(tp, op);

I was wondering what exactly the % signs where doing/what they 
are for?
Jun 03 2017
next sibling parent Stefan Koch <uplink.coder googlemail.com> writes:
On Saturday, 3 June 2017 at 16:22:33 UTC, Francis Nixon wrote:
 When looking at std.variant I found the following line:
 return q{
     static if (allowed!%1$s && T.allowed!%1$s)
          if (convertsTo!%1$s && other.convertsTo!%1$s)
              return VariantN(get!%1$s %2$s other.get!%1$s);
 }.format(tp, op);

 I was wondering what exactly the % signs where doing/what they 
 are for?
Those are positional arguments to format. %1$s refers to the first argument (in this case tp) while %2$s refers to the second (op)
Jun 03 2017
prev sibling next sibling parent Igor Shirkalin <mathsoft inbox.ru> writes:
On Saturday, 3 June 2017 at 16:22:33 UTC, Francis Nixon wrote:
 When looking at std.variant I found the following line:
 return q{
     static if (allowed!%1$s && T.allowed!%1$s)
          if (convertsTo!%1$s && other.convertsTo!%1$s)
              return VariantN(get!%1$s %2$s other.get!%1$s);
 }.format(tp, op);

 I was wondering what exactly the % signs where doing/what they 
 are for?
https://tour.dlang.org/tour/en/basics/alias-strings
Jun 03 2017
prev sibling parent Basile B. <b2.temp gmx.com> writes:
On Saturday, 3 June 2017 at 16:22:33 UTC, Francis Nixon wrote:
 When looking at std.variant I found the following line:
 return q{
     static if (allowed!%1$s && T.allowed!%1$s)
          if (convertsTo!%1$s && other.convertsTo!%1$s)
              return VariantN(get!%1$s %2$s other.get!%1$s);
 }.format(tp, op);

 I was wondering what exactly the % signs where doing/what they 
 are for?
- q{} is a string that cmust contains D tokens. They allow highlightning in the editors, that's why you missed the point. - % is a format specifier - q{}.format() is format() called in the UFCS fashion
Jun 03 2017