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
third=first+second
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
string1=foo
first+=string1
echo ${(t)first}
echo "$first"
}
integer-local
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