digitalmars.D.learn - switch(string)
- David Ferenczi (24/24) Jun 18 2008 The following code gives the following compilation error:
 - Robert Fraser (7/39) Jun 18 2008 BAR1 and BAR2 are not constant. In D1, try:
 - David Ferenczi (6/46) Jun 18 2008 Thank you very much for the quick reply. Does it mean that a
 - Robert Fraser (11/56) Jun 18 2008 Yes, but you can write it as:
 - David Ferenczi (2/66) Jun 18 2008 Thank you very much! :-) I'm on the way to clarity. ;-)
 - Nick Sabalausky (7/9) Jun 18 2008 To clarify:
 - BCS (4/21) Jun 18 2008 Almost (the difference is almost irrelevant, I think), auto is a do-noth...
 
The following code gives the following compilation error:
Error: case must be a string or an integral constant, not BAR1
Error: case must be a string or an integral constant, not BAR2
--------------------------8<------------------------------------
int main(string[] args)
{
    string BAR1 = "bar1";
    string BAR2 = "bar2";
    string myString = "bar3";
    switch (myString)
    {
        case BAR1:
            break;
        case BAR2:
            break;
        defualt:
            break;
    }
    return 0;
}
--------------------------8<------------------------------------
Can somebody explain me why?
Thanks,
David
 Jun 18 2008
David Ferenczi wrote:
 The following code gives the following compilation error:
 
 Error: case must be a string or an integral constant, not BAR1
 Error: case must be a string or an integral constant, not BAR2
 
 --------------------------8<------------------------------------
 int main(string[] args)
 {
     string BAR1 = "bar1";
     string BAR2 = "bar2";
     string myString = "bar3";
 
     switch (myString)
     {
         case BAR1:
             break;
 
         case BAR2:
             break;
 
         defualt:
             break;
     }
 
     return 0;
 }
 --------------------------8<------------------------------------
 
 Can somebody explain me why?
 
 Thanks,
 David
BAR1 and BAR2 are not constant. In D1, try:
     const BAR1 = "bar1";
In D2, you can also try:
     invariant BAR1 = "bar1";
     enum BAR1 = "bar1";
The enum version and the const version in D1 will not take up any storage.
 Jun 18 2008
Robert Fraser wrote:David Ferenczi wrote:Thank you very much for the quick reply. Does it mean that a constant/invariant doesn't need an explicit storage type? I thought that string was invariant, so it was constant. Isn't it right? Thanks, DavidThe following code gives the following compilation error: Error: case must be a string or an integral constant, not BAR1 Error: case must be a string or an integral constant, not BAR2 --------------------------8<------------------------------------ int main(string[] args) { string BAR1 = "bar1"; string BAR2 = "bar2"; string myString = "bar3"; switch (myString) { case BAR1: break; case BAR2: break; defualt: break; } return 0; } --------------------------8<------------------------------------ Can somebody explain me why? Thanks, DavidBAR1 and BAR2 are not constant. In D1, try: const BAR1 = "bar1"; In D2, you can also try: invariant BAR1 = "bar1"; enum BAR1 = "bar1"; The enum version and the const version in D1 will not take up any storage.
 Jun 18 2008
David Ferenczi wrote:Robert Fraser wrote:Yes, but you can write it as: invariant string BAR1 = "bar1"; If "string" isn't specified it will be deduced.David Ferenczi wrote:Thank you very much for the quick reply. Does it mean that a constant/invariant doesn't need an explicit storage type?The following code gives the following compilation error: Error: case must be a string or an integral constant, not BAR1 Error: case must be a string or an integral constant, not BAR2 --------------------------8<------------------------------------ int main(string[] args) { string BAR1 = "bar1"; string BAR2 = "bar2"; string myString = "bar3"; switch (myString) { case BAR1: break; case BAR2: break; defualt: break; } return 0; } --------------------------8<------------------------------------ Can somebody explain me why? Thanks, DavidBAR1 and BAR2 are not constant. In D1, try: const BAR1 = "bar1"; In D2, you can also try: invariant BAR1 = "bar1"; enum BAR1 = "bar1"; The enum version and the const version in D1 will not take up any storage.I thought that string was invariant, so it was constant. Isn't it right?string is invariant(char)[]. So the letters are constant, but not the reference. This means: string x = "abc"; x[2] ='d'; // ERROR x = "abd"; // Okay It's kind of confusing at first, and I have yet to be convinced of its usefulness, but there ya go.
 Jun 18 2008
Robert Fraser wrote:David Ferenczi wrote:Thank you very much! :-) I'm on the way to clarity. ;-)Robert Fraser wrote:Yes, but you can write it as: invariant string BAR1 = "bar1"; If "string" isn't specified it will be deduced.David Ferenczi wrote:Thank you very much for the quick reply. Does it mean that a constant/invariant doesn't need an explicit storage type?The following code gives the following compilation error: Error: case must be a string or an integral constant, not BAR1 Error: case must be a string or an integral constant, not BAR2 --------------------------8<------------------------------------ int main(string[] args) { string BAR1 = "bar1"; string BAR2 = "bar2"; string myString = "bar3"; switch (myString) { case BAR1: break; case BAR2: break; defualt: break; } return 0; } --------------------------8<------------------------------------ Can somebody explain me why? Thanks, DavidBAR1 and BAR2 are not constant. In D1, try: const BAR1 = "bar1"; In D2, you can also try: invariant BAR1 = "bar1"; enum BAR1 = "bar1"; The enum version and the const version in D1 will not take up any storage.I thought that string was invariant, so it was constant. Isn't it right?string is invariant(char)[]. So the letters are constant, but not the reference. This means: string x = "abc"; x[2] ='d'; // ERROR x = "abd"; // Okay It's kind of confusing at first, and I have yet to be convinced of its usefulness, but there ya go.
 Jun 18 2008
"Robert Fraser" <fraserofthenight gmail.com> wrote in message news:g3al00$20ml$1 digitalmars.com...invariant string BAR1 = "bar1"; If "string" isn't specified it will be deduced.To clarify: invariant BAR1 = "bar1"; Is shorthand for: invariant auto BAR1 = "bar1"; And "auto" means the type is deduced.
 Jun 18 2008
Reply to Nick,"Robert Fraser" <fraserofthenight gmail.com> wrote in message news:g3al00$20ml$1 digitalmars.com...Almost (the difference is almost irrelevant, I think), auto is a do-nothing attribute that is used if no other attributes are used. The syntax for type deduction is "<attributes> <name> = <exp>"invariant string BAR1 = "bar1"; If "string" isn't specified it will be deduced.To clarify: invariant BAR1 = "bar1"; Is shorthand for: invariant auto BAR1 = "bar1"; And "auto" means the type is deduced.
 Jun 18 2008








 
 
 
 David Ferenczi <raggae ferenczi.net> 