Page 1 of 1

Сказка работы скриптового модуля...

Posted: 2008-01-06 15:47:45
by Grin

Code: Select all

sub fun_false()
   uo.print("fun_false")
   return 0
end sub
sub fun_true()
   uo.print("fun_true")
   return 1
end sub
sub test()
   uo.print("while false and true")
   while fun_false() and fun_true()
      uo.print("Yes")
   wend
   uo.print("while true and false")
   while fun_false() and fun_true()
      uo.print("Yes")
   wend
   uo.print("while false and false")
   while fun_false() and fun_false()
      uo.print("Yes")
   wend
end sub

Предлагаю проанализировать выше предложеный скрипт;) Ваши мысли?;)

Posted: 2008-01-06 16:21:54
by Destruction
Моя мысль, что если хоть один из циклов вдруг заработает, то его никто не остановит..

Проверить не на чем, хоть сказал бы, какой результат от выполнения такого скрипта..

Posted: 2008-01-06 16:28:10
by Grin
проблема в обработки условий. а именно что сначала вы полняется все что на писано в условии а потом только идет проверка на результат. тоесть если будет конструкция

Code: Select all

while (j < len(subStr)) and (Source[i+j] == subStr[j])
j = j+1
wend

то мы волей не волей создаем условие выхода за границу массаива subStr, так как будет отработано subStr[len(subStr)]. Ничего хорошего в общем... В трезвых компилятора такая ситуация не возможна.

Posted: 2008-01-07 02:15:15
by Mihail
имхо проблема не столько компилятора, сколько языка..
инжектовский бейсик высокоуровневый язык как-никак поэтому и допускает вообще существование таких страшных конструкций...

Posted: 2008-01-07 09:13:35
by Grin
Причем тут это???? Тут нарушена логика выполнения дерева в логических операторах!