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
Пример такой дал потому что у меня в другом скрипте немного схожая тема.

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