On Monday, 24 February 2014 at 17:47:55 UTC, 1100110 wrote:
On 2/24/14, 11:06, Gary Willoughby wrote:
On Monday, 24 February 2014 at 11:53:00 UTC, anonymous wrote:
On Monday, 24 February 2014 at 11:47:02 UTC, Namespace wrote:
On Monday, 24 February 2014 at 11:41:41 UTC, Gary Willoughby
wrote:
I keep seeing this syntax used a bit and i'm stumped to
what it
means. What is it?
enum foo = q{
// ???
};
http://dlang.org/lex.html#DelimitedString
It's a token string though, not a delimited string. See the
section "Token Strings" on that page.
What are they used for? Simpler for creating code at compile
time?
It allows IDE syntax highlighting and code completion to work
with strings that are going to be mixed in.
You don't have to use it, in fact there's no difference between
this and a normal string.
It's just nicer.
Well... it's more than just "looking" nicer: there *are* some
differences:
For starters, a token string has no "terminating" character: You
won't have to chose between " or `: It'll simply end with the
"last" }. This means that if your mixin-string contains some
strings itself, which itself contains quotes, you should have no
problems with it. EG:
auto code = q{
foreach(i; 0 .. 10)
{
writefln(`"hello" %s`, i);
}
};
Notice how there is nothing special denoting the last "}" as "end
of string": It's *just* the end of string because it is the
closing brace. The only times I've had "issues" is if you plan to
use the "qstring" inside a format (*awesome* for generating
code), and the generated code itself contains a formatted write,
in which case, you'll need to escape the % =>
auto code = q{
foreach(i; 0 .. %s)
{
writefln("hello: %%s", i);
}
};
mixin(format(code, 10));
Also, a "qstring" can only contain valid D tokens ("token
string"). If your mixin string does not adhere some the base D
syntaxic rules, you'll get a compilation error. In particular,
you'll need balanced bracing/parenthesising, and correctly formed
tokens.