Scriptlike v0.9.4 - Perl-like interpolated strings, full examples and more.

Chad Joan via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Wed Sep 23 12:18:21 PDT 2015


On Wednesday, 23 September 2015 at 14:33:23 UTC, Nick Sabalausky 
wrote:
> On 09/23/2015 01:44 AM, Sönke Ludwig wrote:
>>
>> An alternative idea would be to mix in a local "writeln" 
>> function, which
>> can then be used multiple times without syntax overhead:
>>
>> mixin template interp()
>> {
>>      void iwriteln(string str)()
>>      {
>>          // pretend that we actually parse the string ;)
>>          write("This is ");
>>          write(somevar);
>>          writeln(".");
>>      }
>> }
>>
>> void main()
>> {
>>      int somevar = 42;
>>      mixin interp;
>>      iwriteln!("This is ${somevar}.");
>> }
>>
>
> Hmm, interesting idea. I'd leave it as a string-returning 
> function, rather than automatically printing, but a writeln 
> convenience wrapper is a nice idea too.
>
> The one problem I'm seeing with it though, is it wouldn't be 
> able to see symbols declared between the "mixin interp;" and 
> any later uses of it. Ie:
>
> void main()
> {
>     int somevar = 42;
>     mixin interp;
>     iwriteln!("This is ${somevar}.");
>
>     int another = 17;
>     iwriteln!("This won't work, using ${another}.");
> }
>
> Seems like it would be too awkward and confusing to be 
> worthwhile. :(

This is why I argued for alternative mixin syntax in D some ... 
years? ... ago.

It'd be really cool to have a writefln overload that did this:

int somevar = 42;
writefln#("This is ${somevar}");

writefln#("Plus two and you get ${somevar+1}");

Which would just be shorthand for

int somevar = 42;
mixin writefln!("This is ${somevar}");

mixin writefln!("Plus two and you get ${somevar+2}");


I feel like a bit of syntax sugar could go a long way ;)


More information about the Digitalmars-d-announce mailing list