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

Re: two mysteries



On Nov 6,  2:22pm, Ray Andrews wrote:
}
} But what ended up happening is that the type check reported it as (can't 
} recall) no longer integer, and I did the check just before the fatal 
} division,  so something had changed it previous to that.

My only guess is that in some cases the assignment occurs before the
declaration:

torch% START_IDX=1+((idx-1)/page_hight)*page_hight
torch% print ${(t)START_IDX}
scalar
torch% integer START_IDX
zsh: division by zero
torch% print ${(t)START_IDX}
integer
torch% 

The value currently in the scalar $START_IDX is evaluated when the type
changes to integer, which causes the division by zero.

Interestingly, bash allows integers to have non-integer values, so
this is not an error there:

$ foo='1/0'
$ typeset -i foo
$ echo $foo
1/0
$ typeset -p foo
declare -i foo="1/0"
$ 

This is because bash does all the arithmetic only at assignment time.

} Didn't I read that 
} there's a difference between 'typeset -i' and 'integer'?

Read where ...?  Doc:

integer [ {+|-}Hghlprtux ] [ {+|-}LRZi [ N ] ] [ NAME[=VALUE] ... ]
     Equivalent to typeset -i, except that options irrelevant to
     integers are not permitted.



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