Name indirection can substitute only a name value. The second SET command in the following example returns an error message because of the context. When evaluating the expression to the right of the equal sign, Caché interprets @var1 as an indirect reference to a variable name, not a numeric value.
SETvar1="5"SETx=@var1*6
You can recast the example to execute correctly as follows:
OCR:
I Forgot to show you that line: S S="*" Still, it doesn't work.
you mix up 2 variants of indirection
These both are ARGUMENT indirections, where the arguments of WRITE or SET are replaced.
But
is a NAME indirection where the name of a variable or global is expected.
$P(A,S,2) is definitely no a variable or global name.
Docs on Indirection is quite verbose and shows the limits.
Most important: this is a runtime feature and not a compile-time feature!
Looks like it is the fastest Accepted Answer ever, @John Murray ;) Nice!
http://docs.intersystems.com/cache20171/csp/docbook/DocBook.UI.Page.cls?KEY=GCOS_operators#GCOS_operators_indirection
The rules about indirection in ObjectScript can be a bit tricky to comprehend. Your last line is syntactically invalid.
Use this instead:
Name indirection can substitute only a name value. The secondSET command in the following example returns an error message because of the context. When evaluating the expression to the right of the equal sign, Caché interprets @var1 as an indirect reference to a variable name, not a numeric value.