Page 1 of 1

Передача параметров

Posted: 2004-07-10 18:47:15
by ruso
Вобщем такай скриптик:

Code: Select all

sub test()
   var x = 0
   var y = 0
   while not (x == 3)
      x = x + 1
      y = y + 1
      uo.print(str(x) + str(y))
      mySubA(x, y)
   wend
end sub

sub mySubA(x, y)
   x = x + 1
   y = y + 1
   uo.print(str(x) + str(y))
   mySubB(x, y)
end sub

sub mySubB(x, y)
   x = x + 1
   y = y + 1
   uo.print(str(x) + str(y))
end sub


Выдаёт такой результат:

11
22
33
22
33
44
33
44
55

Получается что эти переменные в каждой процедуре локальные, и не изменяют переменные X, Y в процедуре тест ?

Так и должно быть ?

Значит мне надо использовать глобальные переменные что бы изменить значение переменной в под-процедуре ?

Posted: 2004-07-11 10:39:58
by Yoko
почему такой мутный тестовый пример??
неужели такого тебе было не достаточно?

Code: Select all

sub main()
 var x=10
  myproc(x)
 uo.print(x)
end sub

sub myproc(x)
 x=777
end sub


Если ты откроешь документацию по любому языку программирования, особенно по Бейсику с которого дрался синтакс скриптового модуля, то узнаешь о том что при передаче параметров без посредства указателей или специальной нотации функциям передаются КОПИИ параметров.
Это связано например с тем что если бы было иначе и ты вызвал бы myproc(1+2) то возникла бы критичесеская ошибка.

Я не читал всю инструкцию от автора скриптового модуля, если есть время скачай и прочти. Но передачи по указателю и т.п. и даже глобальных переменных я там не видел, поэтому и сделал сначала Get/[yhlp_SetEasyUO] потом Get/[yhlp_SetGlobal].

Posted: 2004-07-11 17:57:14
by ruso
Пример такой дал потому что у меня в другом скрипте немного схожая тема.

Раз передаются только копии переменных, значить сделаю немного по другому. :)