Duration at runtime
I'm confused by the following: import std.stdio; import std.datetime; void main() { string unitType = "seconds"; auto seconds = 1; // auto myDur = dur!(unitType)(seconds); // Error unitType can't be read at compile time. auto myDur = dur!("seconds")(seconds); // Compiles why? } How is seconds able to be read at compile time but unitType cannot? Thanks!
Re: Duration at runtime
On Friday, 19 February 2016 at 04:08:02 UTC, Zekereth wrote: How is seconds able to be read at compile time but unitType cannot? "seconds" is a literal value that the compiler knows about. unitType is a variable that might change between its declaration and use (it doesn't here, but the compiler doesn't check if it actually does, just if it *can*), so the compiler doesn't allow it.
Re: Duration at runtime
On Friday, 19 February 2016 at 04:16:23 UTC, Adam D. Ruppe wrote: On Friday, 19 February 2016 at 04:08:02 UTC, Zekereth wrote: How is seconds able to be read at compile time but unitType cannot? "seconds" is a literal value that the compiler knows about. unitType is a variable that might change between its declaration and use (it doesn't here, but the compiler doesn't check if it actually does, just if it *can*), so the compiler doesn't allow it. Thanks a lot Adam! So is there a way around this?. I want duration to be configurable at runtime.
Re: Duration at runtime
On Friday, 19 February 2016 at 04:21:43 UTC, Zekereth wrote: On Friday, 19 February 2016 at 04:16:23 UTC, Adam D. Ruppe wrote: On Friday, 19 February 2016 at 04:08:02 UTC, Zekereth wrote: How is seconds able to be read at compile time but unitType cannot? "seconds" is a literal value that the compiler knows about. unitType is a variable that might change between its declaration and use (it doesn't here, but the compiler doesn't check if it actually does, just if it *can*), so the compiler doesn't allow it. Thanks a lot Adam! So is there a way around this?. I want duration to be configurable at runtime. Never mind I found a better solution to my problem by storing a Duration instead of the unitType. Works just fine. Thanks a lot I appreciate your help!
Re: Duration at runtime
On 2/18/16 11:36 PM, Zekereth wrote: On Friday, 19 February 2016 at 04:21:43 UTC, Zekereth wrote: On Friday, 19 February 2016 at 04:16:23 UTC, Adam D. Ruppe wrote: On Friday, 19 February 2016 at 04:08:02 UTC, Zekereth wrote: How is seconds able to be read at compile time but unitType cannot? "seconds" is a literal value that the compiler knows about. unitType is a variable that might change between its declaration and use (it doesn't here, but the compiler doesn't check if it actually does, just if it *can*), so the compiler doesn't allow it. Thanks a lot Adam! So is there a way around this?. I want duration to be configurable at runtime. Never mind I found a better solution to my problem by storing a Duration instead of the unitType. Works just fine. Thanks a lot I appreciate your help! Because it might help with some future issue: Instead of auto, declare the unitType as immutable or enum: immutable unitType = "seconds"; enum unitType = "seconds"; Then the compiler knows it won't change. -Steve