:: Visual Foxpro, Foxpro for DOS
Re: Как можно обойти ограничение в 26 параметров?
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Igor Korolyov
Он подходит для разно-смысловых параметров. Т.к. у каждого из них будет своё "имя".
В общем зависит от задачи. А Александр спросил, видимо на чем то споткнувшись...
Перечитав стартовый топик, впечатление, что с подходом что то не то.

А Empty, как раз по описанной тобой причине использую)
Часто в классе не знаю, какой объект будет вызван, и что вернет.
А по именам легко разбирается.

wow1970
Если методы не могут прочитать что-то самостоятельно из других объектов, то тогда нужны параметры.
ИМХО. Это порочно!
Это жесткие связи. Это просто плохо. И годится только для ограниченных частных случаев.


------------------
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Foxtrot

Сообщений: 3408
Откуда: Куда:
Дата регистрации: 25.04.2003
sphinx
если не на бесконечном числе параметров, то хотя бы под 100если не на бесконечном числе параметров, то хотя бы под 100
напомнил анек про прапорщика возьмем количество M, нет M мало, возьмем N


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Аспид

wow1970
Если методы не могут прочитать что-то самостоятельно из других объектов, то тогда нужны параметры.
ИМХО. Это порочно!
Это жесткие связи. Это просто плохо. И годится только для ограниченных частных случаев.

Интересно, о чем это?
Пояснили бы про эти частные порочные связи, а то мало ли что, "птичьи болезни" не дремлют.
Ratings: 1 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
sphinx
Автор

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Igor Korolyov
oCol = Createobject("Collection")
oCol.Add(...) && нужное число разoCol = Createobject("Collection")
oCol.Add(...) && нужное число раз

Тогда коллекция совсем не нужна - нужное число раз я и без коллекции вызову. А хотелось в цикле написать одну строчку.. Впрочем, идея с передачей через массив похоже очень даже подойдет.

Другие идеи тоже интересны. В общем есть над чем подумать. Спасибо!


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
sphinx
Тогда коллекция совсем не нужна - нужное число раз я и без коллекции вызову.

Странно. Тогда я не понимаю, какую задачу ты решаешь.
Что именно ты собираешься вызывать нужное число раз?

Я думал, что коллекция из 100 элементов тебе нужна для передачи 100 параметров одновременно в некоторую функцию.
И это совсем не то же самое, что вызвать эту функцию несколько раз с частью параметров.
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
OutParam = NEWOBJECT("EMPTY")
=Add25ParametersToOutParam(OutParam, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25)
=Add25ParametersToOutParam(OutParam, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50)
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
sphinx
Автор

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
akvvohinc
Странно. Тогда я не понимаю, какую задачу ты решаешь.
Что именно ты собираешься вызывать нужное число раз?

Я думал, что коллекция из 100 элементов тебе нужна для передачи 100 параметров одновременно в некоторую функцию.
И это совсем не то же самое, что вызвать эту функцию несколько раз с частью параметров. Странно. Тогда я не понимаю, какую задачу ты решаешь.
Что именно ты собираешься вызывать нужное число раз?

Я думал, что коллекция из 100 элементов тебе нужна для передачи 100 параметров одновременно в некоторую функцию.
И это совсем не то же самое, что вызвать эту функцию несколько раз с частью параметров.

Ну смотри. Допустим есть некая функция/метод, которая принимает некий символьный параметр и что-то с ним делает. Таких всевозможных значений может быть много, поэтому вместо

oApp.SimpleMetod(tcParameter1)
....
oApp.SimpleMetod(tcParameter100)

написать что-то типа

oMyCollection = oApp.ToCollection(p1, p2, p3..p100)
FOR i=1 TO oMyCollection.Count
oApp.SimpleMetod(oMyCollection[i])
ENDFOR

Как-то поприятнее смотрится, нежели СТО РАЗ повторять вызов функции/метода.
Поэтому идея с массивом выглядит очень даже выгодно - передали массив, из него сделать коллекцию... и далее по плану.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
PaulWist
Похоже плохо описал.
Нет не плохо, просто ты это позиционировал как "буквально на каждом шагу такое нужно". А я изначально говорил что это (передача "параметром" курсора/части курсора - т.е. просто кучи записей) исключения, и нужны весьма и весьма нечасто...

Аспид
ИМХО. Это порочно!
Это жесткие связи. Это просто плохо. И годится только для ограниченных частных случаев.
Да нет, речь идёт про то что МЕТОД объекта чаще/больше работает со свойствами ЭТОГО же объекта, а не с "внешними параметрами". В целом это нормально. Другое дело, что заменять явные параметры (то что нужно исключительно в одном методе) на свойства (то что как минимум для нескольких методов "общее") неправильно. Ну разве что реально их (параметров) очень много, они в большинстве своём "необязательные", или use case предполагает многократные вызовы такого метода с изменением лишь части параметров (т.е. как надо как бы "запоминать" параметры из предыдущего вызова, и лишь некоторые из них менять).

sphinx
А хотелось в цикле написать одну строчку
Прямо скажу, код типа
вызвать_много_раз("процедура_такая_то","для первого раза","для второго раза", "для третьего раза",..."для стопятисотого раза")
даже если это написать "в столбик" - откровенный г*нокод.

Даже в чём-то похожий LINQ-овский
someList.ForEach(лямбда_выполняющаяся_для_каждого_элемента_коллекции)
многими разработчиками считается весьма плохим стилем, в отличие аналогичного по сути, но (вот же кошмар!) четырёхстрочного
foreach (элемент in коллекция)
{
та_же_самая_лямбда_в_явном_виде;
}

и это с учётом того что "обрабатываемый список" (т.е. значения параметров подставляемые в каждый вызов) УЖЕ готов (получен откуда то), и НЕ формируется явно в коде как список из N элементов (тем паче где N под сотню).

Хотя да, для наркоманского JS вполне в духе языка конструкция
[1, 2, 3].forEach(function(a){alert(a);});


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
sphinx
написать что-то типа

oMyCollection = oApp.ToCollection(p1, p2, p3..p100)
FOR i=1 TO oMyCollection.Count
oApp.SimpleMetod(oMyCollection[i])
ENDFOR

Как-то поприятнее смотрится, нежели СТО РАЗ повторять вызов функции/метода.

весь вопрос в том как/откуда берётся этот самый p1,p2,...p100
и может ли он быть взят в виде коллекции/массива/курсора СРАЗУ.

Если он формируется через
p1="значение 1"
p2="значение 2"
... остальные 100 строк

или даже

pArray[1]="значение 1"
pArray[2]="значение 2"
...

то нет РЕШИТЕЛЬНО никакой красоты в цикле для вызова этого самого SimpleMetod.

Если же источник "параметров" изначально может быть получен как массив, то FOR EACH работает с массивом - ему не нужен никакой метод для перегонки данных в коллекцию. Более того, тут даже FOR EACH не обязателен - вполне хватит обычного FOR index = 1 TO ALEN(массив) - с одним лишь исключением- не пытаться работать с "пустым" массивом - т.к. фокс не позволяет делать массив БЕЗ элементов, хоть один да будет там всегда - это надо отдельно учесть и как-то пропустить цикл в этом случае.

sphinx
Поэтому идея с массивом выглядит очень даже выгодно - передали массив, из него сделать коллекцию... и далее по плану.
Бессмысленно на самом деле. Ненужные действия. При том что даже изначальное "сделать цикл" может быть бессмысленным, если значения для этого цикла не получаются сразу в виде курсора/массива/коллекции, а прописываются в коде "по одному".


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
sphinx
Ну смотри. Допустим есть некая функция/метод, которая принимает некий символьный параметр и что-то с ним делает. Таких всевозможных значений может быть много, поэтому вместо
oApp.SimpleMetod(tcParameter1)
....
oApp.SimpleMetod(tcParameter100)

написать что-то типа

oMyCollection = oApp.ToCollection(p1, p2, p3..p100)
FOR i=1 TO oMyCollection.Count
oApp.SimpleMetod(oMyCollection[i])
ENDFOR

Как-то поприятнее смотрится, нежели СТО РАЗ повторять вызов функции/метода.

Александр, может задача слишком необычна.
Но, как говорил Игорь, все зависит от того, откуда все эти переменные берутся.
Банально - поле таблицы. Scan. Объект на форме - уже коллекция. Foreach.
Читаем файл... так после прочтения нужного кол-ва, сразу и вызывать.
Ввод с клавы - сразу после ввода.
Т.е. вырисовывается цикл вызова, не в момент уже собранных параметров, а в момент их собирания?

В голову не приходит откуда еще могут взяться данные)

В общем, если отступишь еще на шаг, и озвучишь, что за задача, может и решение будет выглядеть иначе)


------------------
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Использую, правда, редко "простые объекты". Может, пригодится. Их можно передавать через параметры
Можно использовать в Scatter/Gather



Исправлено 2 раз(а). Последнее : Ydin, 08.12.17 12:05
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
Ydin
IsEverythingOK

Такие "говорящие" имена изрядно веселят
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Это цитата из одной песни
Hearts
Марти Балин



Исправлено 1 раз(а). Последнее : Ydin, 08.12.17 11:27
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Ydin
Использую, правда, редко "простые объекты"

А в чем преимущество (отличия) такого "простого объекта" от Empty-объекта?
Или иначе - зачем создавать Empty-объект таким, мягко говоря, странным способом?



Исправлено 2 раз(а). Последнее : akvvohinc, 08.12.17 13:49
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Ydin
Использую, правда, редко "простые объекты".
Смысла в большинстве этих методов нет.
CreateMyObject -> просто CreateObject("Empty")
PutProp -> просто ADDPROPERTY() - он НЕ ломается если свойство уже существует - просто в него же и пишет.
CopyProp -> опять же тривиальное ADDPROPERTY(m.obj2, "propname", m.obj1.propname)

Разве что CopyProps нужен - но я вот так навскидку даже не придумаю для чего его применить - "ограниченное копирование свойств"... Т.е. скорее всего весьма редкое использование.

Ydin
Можно использовать в Scatter/Gather

В SCATTER использовать можно лишь с опцией ADDITIVE - иначе фокс создаст новый объект и всё что было ранее в этом объекте затрёт.
И в SCATTER (с опцией ADDITIVE) и в GATHER вполне себе можно использовать любой фоксовый объект - хоть Custom, хоть Grid (хотя смысла в этом не очень то и много - разве что сохранение/восстановление свойств объекта в курсор).


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
akvvohinc
Ydin
Использую, правда, редко "простые объекты"

А в чем преимущество (отличия) такого "простого объекта" от Empty-объекта?
Или иначе - зачем создавать Empty-объект таким, мягко говоря, странным способом?
Использую их в основном для снятия полей одной строки таблицы.
А у меня поля Name, Parent ключевые для FrameWork'а
Вот и не подходит мне Empty-объект. В нем больше, чем мне надо.
akvvohinc
зачем создавать Empty-объект таким, мягко говоря, странным способом
Этот "простой" объект более empty, чем объект Empty.
Простите за каламбур. Это объект вообще без свойств и методов.
Методы написаны для наших программистов. Работая с FrameWork'ом многие просто ADDPROPERTY() не знают
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Все, что вы перечислили, относится не к Empty-объекту, а к Custom.
У Empty нет ни свойств, ни методов, то есть, это и есть ваш "пустой объект".
И в него также, помимо прочего, можно добавлять свойства с помощью SCATTER NAME oEmpty ADDITIVE.



Исправлено 2 раз(а). Последнее : akvvohinc, 08.12.17 15:43
Ratings: 0 negative/1 positive
Re: Как можно обойти ограничение в 26 параметров?
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Да, походу, был не прав.
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Ydin
Да, походу, был не прав.
Ерунда)
Думаю просто вся эта фишка создана, до Empty фокса.
Привык. А потом уж смысла менять не было.
(у меня с КА та же хрень)))


------------------
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Да, вероятно.
Ведь Empty появился только в восьмерке.
Ratings: 0 negative/0 positive


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

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

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