:: Visual Foxpro, Foxpro for DOS
Re: Возврат массива из метода
akvvohinc

Сообщений: 4560
Откуда: Москва
Дата регистрации: 11.11.2008
of63
Резервирование памяти под новые элементы массива...
В том сообщении Владимир сравнивал два варианта вызова ALINES(array, ...) :
1) array не существует
2) array - существующий массив

В моем ответе я отметил, что принципиальной разницы между ними нет - никаких дополнительных усилий и проверок в варианте 2 не требуется, так как в обоих случаях можно сразу же создать пустой массив (как при DIMENSION array[1]), который в дальнейшем и пополнять.
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
FaustGreen

Сообщений: 145
Дата регистрации: 26.06.2023
Обычно, если из функции нужно вернуть несколько полей, я пользуюсь объектом(как писали выше):
function calc(a, b)
loResult = createObject("Empty")
addproperty(loResult, "add" , a+b)
addproperty(loResult, "subtract", a-b)
addproperty(loResult, "multiply", a*b)
addproperty(loResult, "divide" , a/b)
return loResult
endfunc

Может кто знает: можно ли получить как то контекстную подсказку для такого объекта?:
loObject = calc(3, 5)
loObject. && Тут хочу чтобы высветились свойства моего объекта, созданного в функции.



Исправлено 5 раз(а). Последнее : FaustGreen, 26.11.24 13:57
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
akvvohinc

Сообщений: 4560
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
loObject. && Тут хочу чтобы высветились свойства моего объекта, созданного в функции.
С объектом на основе базового класса вряд ли получится сделать что-либо путное, ведь заранее неизвестно, что вы туда будете добавлять.
А у класса Empty вообще нет ни одного свойства/метода по умолчанию.

Ну, а для какого-то своего класса, вы можете заполнить таблицу IntelliSense (foxcode) так, чтобы получать желаемое.
А для этого надо изучить систему IntelliSense и научиться работать хотя бы со стандарным IntelliSense Manager'ом Фокса (foxcode.app).
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
of63

Сообщений: 26001
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Не удастся "вернуть" (в фоксе это и не предусмотрено) массив из функции, не определив его снаружи функции. Это вам не ALINE например.

Не прочитал трэд, но все просто с возвратом (или заполнением внешнего массива)

1.
PRIVATYE X
DIMEN X[1]
X[1] = 0

FUNC massiv
EXTERNAL ARRAY massiv
X[1] = 1
RETURN


Вобщем, с возвратом из функции фокс возможно только одно значение (если не считать возможность передачи параметра функции по ссылка - оператор улитка). Значением может быть не только скаляр (козырнуь матфизическим словом), но и обьект. Ребьята, оьбьект!, а в нем - что хочешь наполняй )

2.
LOCAL X
DIMEN X[1]
X[1] = 0

FUNC massiv
LPARAM parX
EXTERNAL ARRAY parX
parX[1] = 1
RETURN



Исправлено 1 раз(а). Последнее : of63, 05.12.24 00:10
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
akvvohinc

Сообщений: 4560
Откуда: Москва
Дата регистрации: 11.11.2008
of63
Не удастся "вернуть" (в фоксе это и не предусмотрено) массив из функции, не определив его снаружи функции.
Был в теме пример, опровергающий твоё утверждение:
LOCAL var
DO MakeArray WITH var
FUNCTION MakeArray (arrname)
DIMENSION arrname[5]



Исправлено 1 раз(а). Последнее : akvvohinc, 05.12.24 00:50
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
of63

Сообщений: 26001
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Это другое )
когда DO .. WITH параметр, то это передача по указателю! )

Доб. Еще другое:
DO ... WITH @параметр
тогда будет как в функции - передача значения...

Если сейчас понятно слово "по указателю", сишный, ассеблерный термин... Указатель, ссылка... и собственно значение...

Да, и важно! Если вы определяете передачу параметра в функцию как "по ссылке" (скромно умолчим, как это делается физически), то вы в фоксовой функции можете менять переменные, переданные в функцию
типа
a = 1
= функция(@a)
? a && 2

FUNC функция
LPARA par1
pat1 = 2
RETURN



Исправлено 3 раз(а). Последнее : of63, 05.12.24 01:46
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
akvvohinc

Сообщений: 4560
Откуда: Москва
Дата регистрации: 11.11.2008
of63
Это другое )
когда DO .. WITH параметр, то это передача по указателю!
Ты писал о необходимости создать массив перед вызовом функции.
Я привел пример, показывающий, что такой необходимости нет.
Да, в функцию передается указатель, но не на массив.
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
lemenev
Автор

Сообщений: 229
Дата регистрации: 23.06.2022
of63
Не удастся "вернуть" (в фоксе это и не предусмотрено) массив из функции, не определив его снаружи функции. Это вам не ALINE например.
Олег, прочти самое первое сообщение. Там сказано, что есть возможность возвращать массив из метода через команду RETURN. При этом создаётся новый массив как в ALINE. Ничего снаружи метода определять не нужно. Там приведён пример. Но это работает только для метода внутри класса.
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
of63

Сообщений: 26001
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
akvvohinc
of63
Это другое )
когда DO .. WITH параметр, то это передача по указателю!
Ты писал о необходимости создать массив перед вызовом функции.
Я привел пример, показывающий, что такой необходимости нет.
Да, в функцию передается указатель, но не на массив.

Серега, ты прав! Достаточно определения снаружи функции только лишь определения, точнее наличия переменной (зарезервировано имя, или память, или что-то там в фоксе)

То, что ф-ия может переопределить внешнюю переменную (скаляр), переданную по указателю, в массив - это интересно!
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
of63

Сообщений: 26001
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
lemenev
of63
Не удастся "вернуть" (в фоксе это и не предусмотрено) массив из функции, не определив его снаружи функции. Это вам не ALINE например.
Олег, прочти самое первое сообщение. Там сказано, что есть возможность возвращать массив из метода через команду RETURN. При этом создаётся новый массив как в ALINE. Ничего снаружи метода определять не нужно. Там приведён пример. Но это работает только для метода внутри класса.

Михаил, на фразу "только для метода внутри класса" - пытаюсь понять механику
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
Vedmak

Сообщений: 6061
Откуда: CiTY
Дата регистрации: 30.10.2003
Никогда не использую передачу массива в функцию, только через указатели (хороший стиль который позитивно влияет на расход RAM)

Только через указатели:

local laParent[1]
= CallAaa( @laParent )
? laParent[1]
func CallAaa
lparam laParam
laParam[1] = "sucess"
return .t. && )))))
endfunc


------------------
Говорить стоит лишь для тех, кто слушает.




Исправлено 5 раз(а). Последнее : Vedmak, 14.12.24 00:22
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
akvvohinc

Сообщений: 4560
Откуда: Москва
Дата регистрации: 11.11.2008
Vedmak
Никогда не использую передачу массива в функцию, только через указатели
А есть способ передать массив иначе?
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
Vedmak

Сообщений: 6061
Откуда: CiTY
Дата регистрации: 30.10.2003
Зачем? )


------------------
Говорить стоит лишь для тех, кто слушает.




Исправлено 1 раз(а). Последнее : Vedmak, 14.12.24 00:27
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
Vedmak

Сообщений: 6061
Откуда: CiTY
Дата регистрации: 30.10.2003
ты хочеш передать массив в функцию и данные там умрут или из функции должны вернутся данные для последующей обработки ?


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
sphinx

Сообщений: 31892
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Не, идея смысла не лишена. Просто многие, как и я, наверное - или параметрами, или объект передать, типа CUSTOM. Без всяких революций. Ну, оболочку а-ля 1С не писал и не собираюсь. Для моих задач не требовалось, но способ интересный. Скажем так, он ушел в хранилище идей. Кому нужно и интересно - воспользуются.
Может и лично не поблагодарят, бывает, что через года потом... Но это неважно.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
Vedmak

Сообщений: 6061
Откуда: CiTY
Дата регистрации: 30.10.2003
Вижу, у тебя в посте смену фонтов, тебя принуждали ))) расскажи кто... может мы присоеденимся)


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
Vedmak

Сообщений: 6061
Откуда: CiTY
Дата регистрации: 30.10.2003
Сань ты мой код видел... стиль очевиден )


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
akvvohinc

Сообщений: 4560
Откуда: Москва
Дата регистрации: 11.11.2008
Vedmak
ты хочешь передать массив в функцию и данные там умрут или из функции должны вернуться данные для последующей обработки ?
Для чего мне в функции нужен массив - неважно.
Я лишь имел в виду, что не знаю в Фоксе другого способа передать массив в функцию кроме как по ссылке.
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
Vedmak

Сообщений: 6061
Откуда: CiTY
Дата регистрации: 30.10.2003
Ты меня не услышал.


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Возврат массива из метода
akvvohinc

Сообщений: 4560
Откуда: Москва
Дата регистрации: 11.11.2008
Vedmak
Ты меня не услышал.
Думал, что у меня проблемы только со зрением, а оказывается вот оно что!..
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 19 (Гостей: 19)

© 2000-2025 Fox Club 
Яндекс.Метрика