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

Re: Could someone clarify how math functions work?



On Dec 18, 10:45pm, Eric Cook wrote:
} Subject: Could someone clarify how math functions work?
}
} zsh -c 'add() ( for arg; do (( n += arg )); done; print  n: $n );
} functions -M add; print results: $(( add(1,2,3) ))'
} 
} Outputs:
} n: 6
} results: 3
} 
} where as:
} zsh -c 'add() { local arg n; for arg; do (( n += arg )); done; print n:
} $n }; functions -M add; print results: $(( add(1,2,3) ))'
} 
} Outputs:
} n: 6
} results: 6
} 
} Is that expected behavior? If so, could you explain why?

The following might illustrate:

zsh -c 'add() ( for arg; do (( n += arg )); done; print  n: $n );
functions -M add; print results: $(( add(3,2,1) ))'

zsh -c 'add() ( for arg; do (( n += arg )); done; print  n: $n );
functions -M add; print results: $(( add(3,1,2) ))'


When you define add() with parens ( ) around the function body, you
are running the function body in a subshell.  The "last arithmetical
expression evaluated" IN THE CURRENT SHELL is the processing of the
argument list of the call to add(), which is done left-to-right and
is therefore "3" in the original example.

When you define add() with braces { } you are running the function
body in in the current shell, so the last expression is the last
assignment in the for-loop body.



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