Thread overview
Add property setting to chain
Jul 15, 2017
closescreen
Jul 15, 2017
closescreen
Jul 15, 2017
Ali Çehreli
Jul 16, 2017
closescreen
July 15, 2017
Let i have code:

Clock.currTime.to!DateTime.Interval!DateTime( 24.hours ).fwdRange( h=>h+1.hours ).writeln;

Now if i want to set the minute=0 and second=0 without breaking chain, what i should do?


I think about somewhat like:

with( Clock.currTime.to!DateTime){
 minute=0;
 second=0
}.Interval!DateTime( 24.hours ).fwdRange( h=>h+1.hours ).writeln;

But it is wrong, because 'with' not return me anything.
July 15, 2017
I found this solution:

Clock.currTime.to!DateTime.pipe!( dt=>(dt.minute=0,dt.second=0, dt) ).Interval!DateTime( 24.hours ).fwdRange( h=>h+1.hours ).writeln;

Or:

Clock.currTime.to!DateTime.pipe!( "a.minute=0, a.second=0, a" ).Interval!DateTime( 24.hours ).fwdRange( h=>h+1.hours ).writeln;



Is this code looks good, idiomatic?
July 15, 2017
On 07/15/2017 12:53 PM, closescreen wrote:
> Let i have code:
>
> Clock.currTime.to!DateTime.Interval!DateTime( 24.hours ).fwdRange(
> h=>h+1.hours ).writeln;
>
> Now if i want to set the minute=0 and second=0 without breaking chain,
> what i should do?
>
>
> I think about somewhat like:
>
> with( Clock.currTime.to!DateTime){
>  minute=0;
>  second=0
> }.Interval!DateTime( 24.hours ).fwdRange( h=>h+1.hours ).writeln;
>
> But it is wrong, because 'with' not return me anything.

I would probably write a function:

import std.datetime;
import std.stdio;
import std.range;
import std.conv;

DateTime hourPrecision(DateTime dt) {
    dt.minute = 0;
    dt.second = 0;
    return dt;
}

void main() {
    Clock.currTime.to!DateTime.hourPrecision.Interval!DateTime( 24.hours ).fwdRange( h=>h+1.hours ).writeln;
}

Ali

July 16, 2017
Thanks for reply, Ali.