RU 🔒 Locked

Проблемы с GOSUB "неверное число аргументов"

Aleks Versus Moderator 09.08.2011 05:31 8 comments 8203 views

Решил сделать отдельной темой, так как в “Как сделать?” уже чёрт ногу сломит.
В других темах ответа на вопрос не нашел. Может плохо искал? Не может же быть, что у одного меня такая проблема.
В хелпе тоже ничего об этом не сказано.

Проблема такая:
Есть строка наподобие gosub ‘subprogram’,$пар1,$пар2,пар3,пар4,пар5,$пар6,пар7,пар8,$пар9,gfh10
При попытке её выполнить QSP выдает “Неверное число аргументов оператора / функции”, Код ошибки: 120
Убираю пару последних параметров и всё работает.
Вопрос в следующем: не возможность передавать в args[] больше десяти (или девяти?) параметров - это так и должно быть, или это глюк, баг, ошибка?

Да, число параметров ограничено.

Это не баг и не глюк, в QSP действительно существует ограничение на максимальное число аргументов.
Нельзя использовать более 10 аргументов: строка “subprogram” - считается за первый аргумент, и т.д.

Aleks Versus Moderator 09.08.2011 06:28 (14 years ago)

Спасибо за ответы. Жаль только, что в справке об этом не упоминалось.

Справка далека от совершенства, да.

Nex:

Это не баг и не глюк, в QSP действительно существует ограничение на максимальное число аргументов.
Нельзя использовать более 10 аргументов: строка “subprogram” - считается за первый аргумент, и т.д.

Т.е. непосредственно аргументов может быть только 9.

Olegus t.Gl.:

Т.е. непосредственно аргументов может быть только 9.

Аргументов не может быть более 10, но в массив ARGS на данный момент нельзя передать более 9 значений.
Это лишь следствие ограничения на максимальное количество аргументов в записи любого оператора или функции, равное 10, и никак не влияет на использование массива ARGS.

Чтобы пояснить разницу:
1. Допустим, у нас есть оператор “MEGAGOSUB”, первый аргумент которого - имя локации, а второй - количество раз, которое должна быть вызвана локация.
Записывается так

DOUBLEGOSUB 'первая', 5, <параметры>

При этом, мы можем передать в локацию “первая” 8 параметров, т.к. максимальное количество аргументов - 10.

2. Допустим, у нас есть оператор “RUNCOUNTER”, который выполняет локацию, имя которой уже задано соотв. переменной.
Записывается так

RUNCOUNTER <параметры>

При этом, мы можем передать в локацию-счетчик 10 параметров, т.к. максимальное количество аргументов - 10.

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

Nex:

Olegus t.Gl.:

Т.е. непосредственно аргументов может быть только 9.

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

Ну так именно это я и сказал, зачем усложнять-то? И именно это и интересует обычно пользователей в контексте темы “сколько аргументов я могу передать в функцию”.

Olegus t.Gl.,
разницу между твоим высказыванием и тем, что есть на самом деле, я уже выше подробно разжевал.
Твое высказывание “непосредственно аргументов может быть только 9” не соответствует действительности.

Тема закрыта.

Log in or Register to post comments.