Возврат массива из метода | |
---|---|
lemenev Автор Сообщений: 229 Дата регистрации: 23.06.2022 |
С удивлением обнаружил возможность возвращать массив из метода через команду RETURN. При этом создаётся новый массив.
![]() |
Re: Возврат массива из метода | |
---|---|
krin Сообщений: 190 Дата регистрации: 08.02.2005 |
Help -> RETURN command -> Example 2
![]() |
Re: Возврат массива из метода | |
---|---|
Burn Сообщений: 5669 Откуда: Днепр Дата регистрации: 02.01.2002 |
Интересно. Но я, когда не получилось, просто возвращаю объект, созданный в процедуре
![]() |
Re: Возврат массива из метода | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
Такая функция тоже создает массив с заданным именем:
![]() |
Re: Возврат массива из метода | |
---|---|
lemenev Автор Сообщений: 229 Дата регистрации: 23.06.2022 |
Для krin
В моём Help в справке по RETURN нет примеров. А в Help-online здесь на сайте есть, но в него я полез только когда вы мне указали. У меня Help в заголовке пишет: Цитата:И в нём очень много опечаток. Кто может поделиться более поздней версией? Для akvvohinc Такого я тоже не знал. Спасибо. Я использовал только передачу через параметр в подпрограмму ранее определённый в головной программе массив. Исправлено 1 раз(а). Последнее : lemenev, 19.11.24 22:05 ![]() |
Re: Возврат массива из метода | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
А вот то же самое, но чуть иначе (аналог версии с методом класса):
Исправлено 1 раз(а). Последнее : akvvohinc, 20.11.24 00:37 ![]() |
Re: Возврат массива из метода | |
---|---|
kornienko_ru Сообщений: 415 Откуда: Владивосток Дата регистрации: 06.09.2015 |
Я бы так предпочел:
![]() |
Re: Возврат массива из метода | |
---|---|
Joys Сообщений: 3571 Дата регистрации: 25.06.2000 |
[attachment 36999 ShmSoft-80124_241120063200.png] ![]() |
Re: Возврат массива из метода | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
На мой взгляд, смысла в такой функции нет. Вместо этого я бы написал просто dimension myArray[3] Ведь суть этой темы как раз в том, что массив создается внутри функции (метода), а не напрямую. Но остается обсудить ещё главное - в каких случаях это может потребоваться или просто быть удобным. ![]() Исправлено 1 раз(а). Последнее : akvvohinc, 20.11.24 08:16 ![]() |
Re: Возврат массива из метода | |
---|---|
AndyNigmatec Сообщений: 1675 Откуда: Волгоград Дата регистрации: 28.06.2015 |
ну это как бы давно известный фокус ...
![]() |
Re: Возврат массива из метода | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Да. А что-нибудь кроме этого? Например, оставаясь в рамках "только Фокса"? ![]() |
Re: Возврат массива из метода | |
---|---|
Владимир Максимов Сообщений: 14146 Откуда: Москва Дата регистрации: 02.09.2000 |
Так все случаи, когда надо получить список чего-либо, но по каким-то причинам использование курсора невозможно. Для примера, стандартные функции FoxPro: AFIELDS(), ALINES(), ADATABASES() и т.п. Вот что-то аналогичное... ![]() |
Re: Возврат массива из метода | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
Автор писал: Цитата: А для указанных вами случаев не требуется возврат через RETURN @array. Достаточно передать в функцию переменную по ссылке, как в примере, который я привел выше:
![]() |
Re: Возврат массива из метода | |
---|---|
Владимир Максимов Сообщений: 14146 Откуда: Москва Дата регистрации: 02.09.2000 |
Передача по ссылке исходящего параметра - это от безысходности. Когда нет других вариантов. Функция сама должна сформировать и вернуть все, что нужно. Собственно, а зачем в этом случае переменная-то нужна? Делайте курсор, а функция его будет наполнять Одно дело подготовить входные параметры, и совсем другое готовить исходящие параметры. Просто к этому настолько привыкли, что не замечают порочность такого подхода. Функция получается зависимая от внешнего контекста, чего быть не должно. ![]() |
Re: Возврат массива из метода | |
---|---|
lemenev Автор Сообщений: 229 Дата регистрации: 23.06.2022 |
К сожалению, ваш метод с подпрограммой не работает. Выдаёт ошибку: «'ARR' не является массивом» на команде myArray = retarr[3] Данный трюк работает только с методами класса. ![]() |
Re: Возврат массива из метода | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
Значит, этот способ "забываем". Я тоже при проверке получал это сообщение, но при последующих манипуляциях с кодом ошибка "ушла". Видимо, массив ARR в какой-то момент остался в памяти как глобальный (я работал в командном окне). ![]() |
Re: Возврат массива из метода | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
В чем конкретно (в каком внешнем контексте) вы видите разницу между: MakeArray(@array)и, скажем ALINES(array, ...)? Только в том, что в первом случае переменная array должна быть определена перед вызовом, а во втором - может и не быть определена? Если так, то можно указать и на минус второго варианта - областью действия массива в этом случае (Local, Private, Public) вы не можете управлять. ![]() |
Re: Возврат массива из метода | |
---|---|
andrewk Сообщений: 221 Откуда: Красноярск Дата регистрации: 15.05.2005 |
upd: ой, пока писал этот пост уже три раза ответили))
---- И это работает? Как-то печально звучит) Простейшие примеры навскидку: 1. Из функции нужно вернуть не одно, а несколько значений. Как это сделать в Фоксе? Вариант:
2. Функция возвращает пусть и одно значение, но сама она находится в другом prg, который нельзя прописать по set proc to. Придётся делать так:
В чём здесь зависимость функции от внешнего контекста? В чём порочность? Исправлено 1 раз(а). Последнее : andrewk, 20.11.24 15:34 ![]() |
Re: Возврат массива из метода | |
---|---|
Владимир Максимов Сообщений: 14146 Откуда: Москва Дата регистрации: 02.09.2000 |
В самом подходе. В самой идее работы с функцией. Не важно, насколько сложно/просто это в реализации Одно дело, если функция сама все подготовит и вернет значение. И совсем другое, если необходим предварительно подготовить "посадочную площадку" для приема значения. Если функция сама все делает, то не возникает разных "недоразумений" вида "не то", "не там". В случае, если надо готовить переменную до вызова функции - это держится "на честном слове". На дисциплине разработчика ![]() |
Re: Возврат массива из метода | |
---|---|
Владимир Максимов Сообщений: 14146 Откуда: Москва Дата регистрации: 02.09.2000 |
О чем я и говорю. "Привычка". Вы не видите проблемы, поскольку просто привыкли к такому стилю программирования. Массив, возврат которого здесь обсуждается, как раз и содержит "много" значений. Причем не обязательно одного типа ![]()
Сравнивать разные языки программирования - бессмысленное занятие. И крайне вредно переносить "привычки" приобретенные в одном языке в разработку на другом. ![]() |
© 2000-2025 Fox Club  |