Интересное поведение RESULT

Интересное поведение RESULT

Не нашёл, поднимался ли такой момент, и так и не прояснил для себя, глюк это, или задумано так изначально.
Условная игра:

Код:

# START

*pl $func('f1')
--- START ---------------------------------

# f1
$result='результат первой функции'
gs 'f2'
--- f1 ---------------------------------

# f2
$result='результат второй функции'
--- f2 ---------------------------------

По-идее, если принять во внимание, что значения $args[] и $result используются только на одной локации (в ограниченной области кода), результат должен был быть таким: 'результат первой функции', однако $result из локации 'f2' перебил $result из локации 'f1', и результат получился таким 'результат второй функции'. В принципе решается довольно просто:

Код:

# START

*pl $func('f1')
--- START ---------------------------------

# f1
$result['f1']='результат первой функции'
gs 'f2'
--- f1 ---------------------------------

# f2
$result['f2']='результат второй функции'
--- f2 ---------------------------------

И вот всё-таки интересно, такое поведение $result - ошибка плеера, или так задумано?

P.S.: Чтобы избежать рассуждений о том, зачем обращаться к функции через GOSUB, сразу поясню: некоторые локации у меня выполняют роль функций и роль подпрограмм по необходимости.

Aleks Versus
воздвигатель башни
useravatar
Offline
1511 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Интересное поведение RESULT

Насколько я понимаю RESULT это обычная переменная которую вы же и задаете. Ваша первая подпрограмма задала ей значение 'результат первой функции' а потом вы эту переменную сами же переопределили во второй подпрограмме. Т.к. вторая подпрограмма вызывается после присваивания RESULTу первого значения, то и переменная перезаписывается. Это не баг плеера, это просто организация вашего кодаи по логике он как раз должен был работать так как он работает. Хотя я и не знаток устройства QSP и возможно неправильно понял суть вопроса. В  таком случае - прошу прощения.

Bumbr
useravatar
Offline
68 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Интересное поведение RESULT

Да, это старый известный баг. Срабатывает вроде только при GOSUB. У себя я выхожу из положения следующим образом: в теле процедур/функций присваиваю результат промежуточной переменной, например $ARGS['Результат']. А в конце, если результат должен возвращаться, пишу следующее:

Код:

killvar 'Result'

$Result=$ARGS['Результат']

Необходимость удаления Result обусловлена тем, что числовой результат Result, может быть "перебит" присвоением где-нибудь выше по коду (в какой-нибудь процедуре) строкового значения $Result. А так всё срабатывает так, как мне нужно.

Olegus t.Gl.
useravatar
Offline
137 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Интересное поведение RESULT

Bumbr написал(а):

Насколько я понимаю RESULT это обычная переменная которую вы же и задаете. Ваша первая подпрограмма задала ей значение 'результат первой функции' а потом вы эту переменную сами же переопределили во второй подпрограмме. Т.к. вторая подпрограмма вызывается после присваивания RESULTу первого значения, то и переменная перезаписывается. Это не баг плеера, это просто организация вашего кодаи по логике он как раз должен был работать так как он работает. Хотя я и не знаток устройства QSP и возможно неправильно понял суть вопроса. В  таком случае - прошу прощения.

Result позиционируется как локальная переменная, так же как и массив ARGS. Описанному поведению вызова GOSUB есть объяснение от Байта (что GOSUB вызывается не как подпрограмма, а как часть общего кода), но это не вполне корректно и в следующих версиях QSP будет исправлено. Так что есть все причины считать это настолько неудачной фичей, что она тянет на полноценный баг.

Olegus t.Gl.
useravatar
Offline
137 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Информация

Статистика форума:
 
Всего тем:
977
Всего опросов:
14
Всего сообщений:
16790681
Сообщений на этой неделе:
8
Пользователи форума:
 
Всего пользователей:
2396
Последним зарегистрировался:
WasTed