John Todd
2005-Sep-05 11:13 UTC
[Asterisk-Users] Unexpected results with "While" and "EndWhile" applications
I seem to be having a conceptual problem with the "While" and "EndWhile" applications. It seems that on the first cycle, even if the result of the "While" is false that the enclosed applications will get run. Is this expected? It seems to be counter-intuitive, but I don't know what the intent of the While routines is. I could of course put a "GotoIf" before the While loop to check to ensure that the first expression is true before entry into the While loop, but that seems redundant and ugly since the while point of While and EndWhile is to avoid the inelegance of GotoIf, I thought. If anyone can't come up with a better explanation, I'll open a ticket on this but I'd like to first make sure that this behavior is not expected. exten => 2231,1,Set(staticnumber=0) exten => 2231,n,Set(counter=1) exten => 2231,n,While($["${counter}"<"${staticnumber}"]) exten => 2231,n,NoOp("This part of the code should never run!") exten => 2231,n,Set(counter=$[${counter}+1]) exten => 2231,n,EndWhile exten => 2231,n,NoOp("This part of the code should be the only thing that gets run!") Console output from dialing 2231: -- Executing Set("SIP/2203-c134", "staticnumber=0") in new stack -- Executing Set("SIP/2203-c134", "counter=1") in new stack -- Executing While("SIP/2203-c134", "0") in new stack -- Executing NoOp("SIP/2203-c134", ""This part of the code should never run!"") in new stack -- Executing Set("SIP/2203-c134", "counter=2") in new stack -- Executing EndWhile("SIP/2203-c134", "") in new stack -- Executing NoOp("SIP/2203-c134", ""This part of the code should be the only thing that gets run!"") in new stack *CLI> show version Asterisk CVS HEAD built by root@some.host.com on a i686 running Linux on 2005-09-03 23:27:34 UTC JT
C F
2005-Sep-05 20:39 UTC
[Asterisk-Users] Unexpected results with "While" and "EndWhile" applications
On 9/5/05, John Todd <jtodd@loligo.com> wrote:> > I seem to be having a conceptual problem with the "While" and > "EndWhile" applications. It seems that on the first cycle, even if > the result of the "While" is false that the enclosed applications > will get run. Is this expected? It seems to be counter-intuitive, > but I don't know what the intent of the While routines is. I could > of course put a "GotoIf" before the While loop to check to ensure > that the first expression is true before entry into the While loop, > but that seems redundant and ugly since the while point of While and > EndWhile is to avoid the inelegance of GotoIf, I thought. > > If anyone can't come up with a better explanation, I'll open a ticket > on this but I'd like to first make sure that this behavior is not > expected. > > > exten => 2231,1,Set(staticnumber=0) > exten => 2231,n,Set(counter=1) > exten => 2231,n,While($["${counter}"<"${staticnumber}"])Put A space around the < operator, like this exten => 2231,n,While($["${counter}" < "${staticnumber}"]) This should help it.> exten => 2231,n,NoOp("This part of the code should never run!") > exten => 2231,n,Set(counter=$[${counter}+1]) > exten => 2231,n,EndWhile > exten => 2231,n,NoOp("This part of the code should be the only thing > that gets run!") > > > Console output from dialing 2231: > > -- Executing Set("SIP/2203-c134", "staticnumber=0") in new stack > -- Executing Set("SIP/2203-c134", "counter=1") in new stack > -- Executing While("SIP/2203-c134", "0") in new stack > -- Executing NoOp("SIP/2203-c134", ""This part of the code should > never run!"") in new stack > -- Executing Set("SIP/2203-c134", "counter=2") in new stack > -- Executing EndWhile("SIP/2203-c134", "") in new stack > -- Executing NoOp("SIP/2203-c134", ""This part of the code should > be the only thing that gets run!"") in new stack > *CLI> show version > Asterisk CVS HEAD built by root@some.host.com on a i686 running Linux > on 2005-09-03 23:27:34 UTC > > JT > _______________________________________________ > --Bandwidth and Colocation sponsored by Easynews.com -- > > Asterisk-Users mailing list > Asterisk-Users@lists.digium.com > http://lists.digium.com/mailman/listinfo/asterisk-users > To UNSUBSCRIBE or update options visit: > http://lists.digium.com/mailman/listinfo/asterisk-users >