Thread overview | ||||||
---|---|---|---|---|---|---|
|
July 26, 2012 Variable interpolation in strings | ||||
---|---|---|---|---|
| ||||
Jonathan M. Davis' recent post about string mixins reminded me of something I put together a couple of months ago: variable interpolation in strings http://dpaste.dzfl.pl/5689d535 Some of the projects I work on have lots of embedded queries which are assembled on the fly (not just values but column and table names). Using concatenation tends to break the queries up excessively, while using format with lots of arguments makes them hard to modify. So I took a page from PHP's book and implemented "$foo" style expansion. My original thought was to allow cool syntax like x!"embedded variable: $foo" but template instantiations don't have access to variables from instantiation scope (unless you pass them explicitly via alias, of course). Thus the need for string mixins. The `inContext` version does take a struct or object which constitutes the set of available variables. My ugly parsing code could be replaced (maybe, haven't actually tested it) by the nice version(none)'d function which uses regexs if match() was available for CTFE. Justin |
July 26, 2012 Re: Variable interpolation in strings | ||||
---|---|---|---|---|
| ||||
Posted in reply to Justin Whear | It might be useful to do this kind of thing with a filter function: string escape(string s) { return s.replace("\n", "\\n"); } auto foo = "cool\nstuff"; string lol = mixin(x("blah $foo", escape)); assert(lol == "blah cool\\nstuff"); |
July 26, 2012 Re: Variable interpolation in strings | ||||
---|---|---|---|---|
| ||||
Posted in reply to Justin Whear |
> My original thought was to allow cool syntax like x!"embedded variable:
> $foo" but template instantiations don't have access to variables from
> instantiation scope (unless you pass them explicitly via alias, of
> course).
template mixins?
|
July 26, 2012 Re: Variable interpolation in strings | ||||
---|---|---|---|---|
| ||||
Posted in reply to Tobias Pankrath | On Thu, 26 Jul 2012 22:40:25 +0200, Tobias Pankrath wrote: >> My original thought was to allow cool syntax like x!"embedded variable: >> $foo" but template instantiations don't have access to variables from >> instantiation scope (unless you pass them explicitly via alias, >> of course). > > template mixins? No, template mixins can only add declarations: "A TemplateMixin takes an arbitrary set of declarations from the body of a TemplateDeclaration and inserts them into the current context." (http://dlang.org/template- mixin.html) |
Copyright © 1999-2021 by the D Language Foundation