Mercurial > octave
changeset 31671:67770ec6f0b5
maint: merge stable to default
author | Nicholas R. Jankowski <jankowski.nicholas@gmail.com> |
---|---|
date | Fri, 16 Dec 2022 15:59:46 -0500 |
parents | d949b698d1a9 (current diff) 4058dd350ea1 (diff) |
children | 6327dab37002 |
files | |
diffstat | 2 files changed, 76 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/interpreter/expr.txi Fri Dec 16 15:40:24 2022 -0500 +++ b/doc/interpreter/expr.txi Fri Dec 16 15:59:46 2022 -0500 @@ -814,6 +814,11 @@ preferring the longest possible match at any given point, it is more useful in this case. +Note also that some combinations of binary operators and whitespace can +create ambiguities with Octave's Command Syntax form of calling functions. +See @ref{Command Syntax and Function Syntax} for more detail on avoiding +such issues. + @opindex @code{'} @DOCSTRING(ctranspose)
--- a/doc/interpreter/func.txi Fri Dec 16 15:40:24 2022 -0500 +++ b/doc/interpreter/func.txi Fri Dec 16 15:59:46 2022 -0500 @@ -1906,7 +1906,7 @@ @section Command Syntax and Function Syntax @cindex commands functions -Additionally to the function syntax described above (i.e., calling a function +In addition to the function syntax described above (i.e., calling a function like @code{fun (arg1, arg2, @dots{})}), a function can be called using command syntax (for example, calling a function like @code{fun arg1 arg2 @dots{}}). In that case, all arguments are passed to the function as strings. For example, @@ -1980,6 +1980,76 @@ assigned to a variable, or multiple output arguments of a function should be returned, the function syntax must be used. +It should be noted that mixing command syntax and binary operators can +create ambiguities with mathematical and logical expressions that would use +function syntax. For example, all three of the statements + +@example +arg1 - arg2 +arg1 -arg2 +arg1-arg2 +@end example + +@noindent +could be interpreted as a subtraction operation between +@code{arg1} and @code{arg2}. The first two, however, could also be taken +as a command syntax call to function @code{arg1}, in the first case with +options @code{-} and @code{arg2}, and in the second case with option +@code{-arg2}. + +Octave uses whitespace to interpret such expressions according to the +following rules: + +@itemize @bullet +@item +Statements consisting of plain symbols without any operators that are +separated only by whitespace are always treated as command syntax: + +@example +arg1 arg2 arg3 ... argn +@end example + +@item +Statements without any whitespace are always treated as function syntax: +@example +arg1+arg2 +arg1&&arg2||arg3 +arg1+=arg2*arg3 +@end example + +@item +If the first symbol is a constant (or special-valued named constant pi, i, +I, j, J, e, NaN, or Inf) followed by a binary operator, the statement is +treated as function syntax regardless of any whitespace or what follows the +second symbol: +@example +7 -arg2 +pi+ arg2 +j * arg2 -arg3 +@end example + +@item +If the first symbol is a function or variable and there is no whitespace +separating the operator and the second symbol, the statement is treated +as command syntax: +@example +arg1 -arg2 +arg1 &&arg2 ||arg3 +arg1 +=arg2*arg3 +@end example + +@item +Any other whitespace combination will result in the statement being treated +as function syntax. +@end itemize + +Note 1: If a special-valued named constant has been redefined as a +variable, the interpreter will still process the statement with function +syntax. + +Note 2: Attempting to use a variable as @code{arg1} in a command being +processed as command syntax will result in an error. + @node Organization of Functions @section Organization of Functions Distributed with Octave