[asterisk-users] AEL switch & case
Antony Stone
Antony.Stone at asterisk.open.source.it
Wed Aug 31 06:15:58 CDT 2022
Replying to list this time...
On Wednesday 31 August 2022 at 12:47:13, asterisk at phreaknet.org wrote:
> On 8/31/2022 6:32 AM, Antony Stone wrote:
> > Hi.
> >
> > I think I've discovered a bug in either the implementation or the
> > documentation of the AEL switch command.
> >
> > https://wiki.asterisk.org/wiki/display/AST/AEL+Conditionals gives an
> > example of using switch, and states at the bottom:
> >
> > "Neither the switch nor case values are wrapped in $[ ]; they can be
> > constants, or ${var} type references only."
> >
> > However, I've run into a problem, which can be demonstrated by the simple
> > context:
> >
> > context SwitchTest {
> > s => {
> > Set(FortyTwo=42);
> > Set(SixByNine=54);
> > switch(${SixByNine}) {
> > case 123:
> > NoOp(123);
> > break;
> > case ${FortyTwo}:
> > NoOp(${FortyTwo});
> > break;
> > }
> > }
> > }
> > Am I misundertanding "they can be constants, or ${var} type references
> > only."?
>
> I don't think this is a bug. ${FortyTwo} is not defined when the AEL
> dialplan is transpiled into dialplan. It only gets set at runtime.
Agreed, however that is surely a perfectly reasonable "${var} type reference"?
> This might work if you made FortyTwo a global variable, which would be
> available when this gets parsed.
Quite possibly, but I would expect switch() to work in the same way as
multiple if() statements:
switch(${a}) {
case ${b}: NoOp(${b} matches); break;
case ${c}: NoOp(${c} matches); break;
// etc....
}
should be equivalent to:
if(${a}=${b}) NoOp(${b} matches);
if(${a}=${c}) NoOp(${c} matches);
// etc....
The latter works perfectly well, no matter when ${b} and ${c} are assigned
their values.
I've adjusted my dialplan to use multiple if()s, but I still thik that either
the implementation or the documentation of switch is incorrect.
Antony.
--
I bought a book on memory techniques, but I've forgotten where I put it.
Please reply to the list;
please *don't* CC me.
More information about the asterisk-users
mailing list