digitalmars.D.learn - What are delimited string, heredoc and D token strings?
- Pierre Rouleau (5/5) Jun 27 2010 Hi all,
- Simen kjaeraas (27/30) Jun 27 2010 re?
- Pierre Rouleau (5/30) Jun 27 2010 Thanks for this clear explanation, Simen.
- bearophile (4/6) Jun 27 2010 But keep in mind that normal D string literals can span more than one li...
- Pierre Rouleau (7/8) Jun 27 2010 In what sense? In the sense that adjacent strings are concatenated? If I...
- bearophile (12/13) Jun 27 2010 This is valid D1 code:
- Pierre Rouleau (3/16) Jun 28 2010 Thanks!
- Pierre Rouleau (5/30) Jun 27 2010 Thanks for this clear explanation, Simen.
Hi all, The D2.0 lexical page describes delimited string and token string literals. Is there any example of how these are used and why, somewhere? Thanks -- Pierre
Jun 27 2010
Pierre Rouleau <prouleau001 gmail.com> wrote:Hi all, The D2.0 lexical page describes delimited string and token string =literals. Is there any example of how these are used and why, somewhe=re? Token strings are added for the specific use case of string mixins[1]. They must contain valid D code. mixin( q{ a =3D b; } ); // Works. mixin( q{ this is nonsense, I tell you! } ); // Does not work. Editors may syntax-highlight token strings as if it were normal code. They often do, by virtue of having no idea that it is indeed a string. Delimited strings and heredoc strings exist for simplicity of adding lon= g strings to the source. q"EOS Heredoc strings allow you to add long string literals to your code. They also let you embed "quotes" 'of' `various` =C2=B4kinds=C2=B4 withou= t escaping them. EOS" q"(Delimited strings are much the same as "heredoc" strings, but somewha= t more succinct, by not using a whole identifier for terminators. They are= thus not as suited for long texts.)" [1]: http://digitalmars.com/d/2.0/statement.html#MixinStatement also, http://digitalmars.com/d/2.0/expression.html#MixinExpression http://digitalmars.com/d/2.0/module.html#MixinDeclaration -- = Simen
Jun 27 2010
On 27/06/10 9:52 AM, Simen kjaeraas wrote:Pierre Rouleau <prouleau001 gmail.com> wrote:Thanks for this clear explanation, Simen. I was wondering if D had the equivalnt of Python's triple quote string literals and it does: the delimited string serves the same purpose. Great! -- PierreHi all, The D2.0 lexical page describes delimited string and token string literals. Is there any example of how these are used and why, somewhere?Token strings are added for the specific use case of string mixins[1]. They must contain valid D code. mixin( q{ a = b; } ); // Works. mixin( q{ this is nonsense, I tell you! } ); // Does not work. Editors may syntax-highlight token strings as if it were normal code. They often do, by virtue of having no idea that it is indeed a string. Delimited strings and heredoc strings exist for simplicity of adding long strings to the source. q"EOS Heredoc strings allow you to add long string literals to your code. They also let you embed "quotes" 'of' `various` ´kinds´ without escaping them. EOS" q"(Delimited strings are much the same as "heredoc" strings, but somewhat more succinct, by not using a whole identifier for terminators. They are thus not as suited for long texts.)" [1]: http://digitalmars.com/d/2.0/statement.html#MixinStatement also, http://digitalmars.com/d/2.0/expression.html#MixinExpression http://digitalmars.com/d/2.0/module.html#MixinDeclaration
Jun 27 2010
Pierre Rouleau:I was wondering if D had the equivalnt of Python's triple quote string literals and it does: the delimited string serves the same purpose. Great!But keep in mind that normal D string literals can span more than one line :-) Bye, bearophile
Jun 27 2010
On 27/06/10 11:36 AM, bearophile wrote:But keep in mind that normal D string literals can span more than one line :-)In what sense? In the sense that adjacent strings are concatenated? If I want to create a string literal that embeds new line without explicitly placing a '\n' inside the string, I did not see any other way than using the delimited string (at least inside http://www.digitalmars.com/d/2.0/lex.html). What am I missing? -- Pierre
Jun 27 2010
Pierre Rouleau:In what sense?This is valid D1 code: import std.stdio; void main() { string s = "this is just a test"; writefln(s); } Bye, bearophile
Jun 27 2010
On 27/06/10 1:03 PM, bearophile wrote:Pierre Rouleau:Thanks! -- PierreIn what sense?This is valid D1 code: import std.stdio; void main() { string s = "this is just a test"; writefln(s); } Bye, bearophile
Jun 28 2010
On 27/06/10 9:52 AM, Simen kjaeraas wrote:Pierre Rouleau <prouleau001 gmail.com> wrote:Thanks for this clear explanation, Simen. I was wondering if D had the equivalent of Python's triple quote string literals and it does: the delimited string serves the same purpose. Great! -- PierreHi all, The D2.0 lexical page describes delimited string and token string literals. Is there any example of how these are used and why, somewhere?Token strings are added for the specific use case of string mixins[1]. They must contain valid D code. mixin( q{ a = b; } ); // Works. mixin( q{ this is nonsense, I tell you! } ); // Does not work. Editors may syntax-highlight token strings as if it were normal code. They often do, by virtue of having no idea that it is indeed a string. Delimited strings and heredoc strings exist for simplicity of adding long strings to the source. q"EOS Heredoc strings allow you to add long string literals to your code. They also let you embed "quotes" 'of' `various` ´kinds´ without escaping them. EOS" q"(Delimited strings are much the same as "heredoc" strings, but somewhat more succinct, by not using a whole identifier for terminators. They are thus not as suited for long texts.)" [1]: http://digitalmars.com/d/2.0/statement.html#MixinStatement also, http://digitalmars.com/d/2.0/expression.html#MixinExpression http://digitalmars.com/d/2.0/module.html#MixinDeclaration
Jun 27 2010