www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Creating variable name with variables

reply okibi <okibi ratedo.com> writes:
Hello,

I was wondering if it is possible to create a variable name with other
variables. For example:

char[] left = "num1";
char[] right = "num2";

char[] num1num2 = "doesn't matter what this equals";

How would I create the variable with the values of the first two variables?

Thanks!
Apr 23 2007
parent reply BCS <BCS pathlink.com> writes:
okibi wrote:
 Hello,
 
 I was wondering if it is possible to create a variable name with other
variables. For example:
 
 char[] left = "num1";
 char[] right = "num2";
 
 char[] num1num2 = "doesn't matter what this equals";
 
 How would I create the variable with the values of the first two variables?
 
 Thanks!

you can't unless left and right are const. If they are you have several options: mixin("char[] "~left~right~";") then use mixin(left~right) for the variable another option is a total hack template Value(T, char[] str) { T Value; } Value!(char[], left~right) = "hello"; writef("%s\n", Value!(char[], left~right)); I haven't actually tried that usage, but you can make it work for some cases. The advantage of it is that you can do it with D v1.0
Apr 23 2007
parent reply okibi <okibi ratedo.com> writes:
BCS Wrote:

 okibi wrote:
 Hello,
 
 I was wondering if it is possible to create a variable name with other
variables. For example:
 
 char[] left = "num1";
 char[] right = "num2";
 
 char[] num1num2 = "doesn't matter what this equals";
 
 How would I create the variable with the values of the first two variables?
 
 Thanks!

you can't unless left and right are const. If they are you have several options: mixin("char[] "~left~right~";") then use mixin(left~right) for the variable another option is a total hack template Value(T, char[] str) { T Value; } Value!(char[], left~right) = "hello"; writef("%s\n", Value!(char[], left~right)); I haven't actually tried that usage, but you can make it work for some cases. The advantage of it is that you can do it with D v1.0

They won't be const so that first method is out. I'll give the second method a go and see if it works. Thanks!
Apr 23 2007
parent BCS <BCS pathlink.com> writes:
okibi wrote:
 BCS Wrote:
 
 
okibi wrote:

Hello,

I was wondering if it is possible to create a variable name with other
variables. For example:

char[] left = "num1";
char[] right = "num2";

char[] num1num2 = "doesn't matter what this equals";

How would I create the variable with the values of the first two variables?

Thanks!

you can't unless left and right are const. If they are you have several options: mixin("char[] "~left~right~";") then use mixin(left~right) for the variable another option is a total hack template Value(T, char[] str) { T Value; } Value!(char[], left~right) = "hello"; writef("%s\n", Value!(char[], left~right)); I haven't actually tried that usage, but you can make it work for some cases. The advantage of it is that you can do it with D v1.0

They won't be const so that first method is out. I'll give the second method a go and see if it works. Thanks!

if they aren't const than the only option is #3 char[][char[]] vars; vars[left~right] = something; but that give you a hash lookup for every access (modulo optimizations).
Apr 23 2007