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

Re: suprise with -=

On 10/19/2015 05:27 PM, Bart Schaefer wrote:
The parser doesn't know that "first" is an integer, or even that it's
a variable that was previously declared.
That puzzles me. Have not all your examples demonstrated that the parser is aware of the type of the variable and that it will perform it's operations accordingly?

   test2 ()

       integer first=1 second=2

       print A $third
       integer third
       print B $third

       integer fourth=first+second
       print C $fourth

   A first+second    # 'third' is scalar so does the 'wrong' thing.
   B 0               # 'third' is now known to be integer by the 'print'.
   C 3               # 'fourth' is integer up front and remembered to
   be so.

I see very clearly that the type can change silently or sometimes not change at all and just sorta 'do nothing':

   test1 ()


       integer first=1

       echo ${(t)first}
       echo "$first"

   1            # The addition does nothing at all, but no error is thrown.

... and "${(t) ...}" is surely the demonstration that types are remembered? I'm makinga deep error here, probably.

The first shells didn't have integers or arrays at all.  They had only
strings, and a few (external) programs like "expr" that could interpret
strings of digits as numbers.
Thanks. These 'history lessons' are invaluable (to me, anyway). If anything besides strings were never anticipated in the original design of shells,then integers would bea 'tack on' and one could see that the whole issue of declarations/typing would behandled poorly. The lesson is that one must be bloody careful. OTOH, whereas in Cif one wants to force a typecast it's a labor, whereas in zsh one can do it not onlyeffortlessly, but even invisibly.
Powerful but dangerous.Caveat emptor.

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