Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Опциональный входной параметр функции / 16 сообщений из 16, страница 1 из 1
27.08.2021, 12:52
    #40093433
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
Есть функция
Код: pascal
1.
2.
3.
4.
5.
function XXX(a: TList<x>; b: TMy; var c: TStrings; d: string = ''): booelan;

XXX( MyList , MyVal, stroki);
XXX( nil, nil, stroki, 'yyy');
XXX( MyList, nil, nil); //не работает



Пачему в последнем вызове нельзя указать пустой параметр?
XXX( MyList , nil, nil);
Что для этого надо?


Как временное решение, сделана дополнительная обертка
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function YYY(a: TList<x>; b: TMy; d: string = ''): booelan;
var
  res: TStrings;
begin
  res := Tstrings.Create;
  try
    XXX( a, b, res, d);
  finally
    res.Free;
  end;
end;



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

Спасибо заранее
...
Рейтинг: 0 / 0
27.08.2021, 13:04
    #40093436
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
bzumsПачему в последнем вызове нельзя указать пустой параметр?

Потому что с объявлено как var , то есть ему нужна переменная .
Константа не пройдёт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.08.2021, 13:22
    #40093444
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
Функция XXX - твоя? Если да, то сделай c: PStrings.
...
Рейтинг: 0 / 0
27.08.2021, 13:39
    #40093450
misha mike
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
Можно так:
Код: pascal
1.
XXX(MyList, nil, PStrings(nil)^);
...
Рейтинг: 0 / 0
27.08.2021, 13:57
    #40093454
Michael Longneck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
Вот всегда считал такие вызовы - с PPointer(X)^ и прочим допустимым только в "системном коде", где API какое-то вызывается. В обычном, "бизнес-логическом" коде должно быть гладко, безо всяких лишних указателей (явных) и пр. Перегрузка - хорошее решение.
...
Рейтинг: 0 / 0
27.08.2021, 14:00
    #40093455
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
Очепятка
Код: pascal
1.
function XXX(a: TList<x>; b: TMy; out c: TStrings; d: string = ''): booelan;


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function YYY(a: TList<x>; b: TMy; var d: string = ''): booelan;
var
  res: TStrings;
begin
  res := Tstrings.Create;
  try
    XXX( a, b, res, d);
  finally
    res.Free;
  end;
end;


Так вот сделано
...
Рейтинг: 0 / 0
27.08.2021, 14:01
    #40093456
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
Такой вариант не работает XXX(MyList, nil, PStrings(nil)^) почему-то
...
Рейтинг: 0 / 0
27.08.2021, 14:04
    #40093457
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
bzumsТак вот сделано

var и out технически ничем не отличаются. Так что см.выше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.08.2021, 14:05
    #40093459
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
27.08.2021 14:01, bzums пишет:
> Такой вариант не работает XXX(MyList, nil, PStrings(nil)^) почему-то

может ты уже таки прекратишь заниматься ментальным онанизмом через ж@пу?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.08.2021, 14:17
    #40093465
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
misha mike
Можно так:
Код: pascal
1.
XXX(MyList, nil, PStrings(nil)^);


Так можно только в том случае, если сама функция ожидает такое. А если функция объявлена как var/out - то в 99% случаев - не ожидает. В результате будет Access Violation когда функция попробует туда записать.

Исключение составляют кривые импорты системных функций, которые на самом деле принимают PЧтоЧто, но их импортируют как var/out.
...
Рейтинг: 0 / 0
27.08.2021, 14:45
    #40093480
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
всем спасибо
все плоучилось
...
Рейтинг: 0 / 0
27.08.2021, 15:02
    #40093490
Virtual Student
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
bzums,
Вероятно, кому-то лень делать проверки, типа Assign()
Функция принимает пустую переменную типа TStrings (TStringList и ...)
По всей видимости, объект создается самой функцией, и Ваша обертка лишняя.

P.S.: Сам не люблю такой подход.
...
Рейтинг: 0 / 0
27.08.2021, 15:35
    #40093497
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
Вы же знаете, что чтобы просто заполнить TStrings передавать его как var не нужно?
...
Рейтинг: 0 / 0
27.08.2021, 16:28
    #40093511
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
Dimitry Sibiryakov
var и out технически ничем не отличаются.
На сколько я помню, out инициализирует строки в пустые. Так можно потерять предыдущее значение.
...
Рейтинг: 0 / 0
27.08.2021, 16:32
    #40093513
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
YuRock
На сколько я помню, out инициализирует строки в пустые.
не только строки
...
Рейтинг: 0 / 0
27.08.2021, 17:13
    #40093522
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опциональный входной параметр функции
Почему у меня адское дежавю?....

И, кстати, Pointer(d) = nil, если d = ''.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Опциональный входной параметр функции / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]