Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: suprise with -=

On Oct 19, 12:34pm, Ray Andrews wrote:
} [...] declare variable types, which is what I'm trying to do with
} 'integer' and after that I'd expect both increment and decrement to
} behave the same way.

The parser doesn't know that "first" is an integer, or even that it's
a variable that was previously declared.  This is perfectly legal:

    if (( RANDOM % 7 ))
    then integer first
    else declare first

(Which is why I'm inclined to say it ought to always be string context
when not explicitly math context, but it's probably way to late for that.)

} I'd consider it very rude for any forcible conversions to occur.
} Better an error, tho again once one has declared an integer one might
} expect one's operators to behave consistently.


torch% integer first=1 second=2
torch% first+=(second)
torch% echo $first
1 second

This has silently forced $first to change into an array because of
explicit array context; it did not interpret "(second)" as arithmetic

Also just to mess things up a bit more:

torch% integer first=1 second=2
torch% third=first+second
torch% print $third
torch% integer third             
torch% print $third

If something has a string value and you re-declare it integer, it does
math on its string value.  Doesn't happen for array to integer.

Messages sorted by: Reverse Date, Date, Thread, Author