www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Duration at runtime

reply Zekereth <paul acheronsoft.com> writes:
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!
Feb 18 2016
parent reply Adam D. Ruppe <destructionator gmail.com> writes:
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.
Feb 18 2016
parent reply Zekereth <paul acheronsoft.com> writes:
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.
Feb 18 2016
parent reply Zekereth <paul acheronsoft.com> writes:
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!
Feb 18 2016
parent Steven Schveighoffer <schveiguy yahoo.com> writes:
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
Feb 19 2016