powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Опциональный входной параметр функции
16 сообщений из 16, страница 1 из 1
Опциональный входной параметр функции
    #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
Опциональный входной параметр функции
    #40093436
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bzumsПачему в последнем вызове нельзя указать пустой параметр?

Потому что с объявлено как var , то есть ему нужна переменная .
Константа не пройдёт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Опциональный входной параметр функции
    #40093444
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функция XXX - твоя? Если да, то сделай c: PStrings.
...
Рейтинг: 0 / 0
Опциональный входной параметр функции
    #40093450
misha mike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно так:
Код: pascal
1.
XXX(MyList, nil, PStrings(nil)^);
...
Рейтинг: 0 / 0
Опциональный входной параметр функции
    #40093454
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот всегда считал такие вызовы - с PPointer(X)^ и прочим допустимым только в "системном коде", где API какое-то вызывается. В обычном, "бизнес-логическом" коде должно быть гладко, безо всяких лишних указателей (явных) и пр. Перегрузка - хорошее решение.
...
Рейтинг: 0 / 0
Опциональный входной параметр функции
    #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
Опциональный входной параметр функции
    #40093456
bzums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такой вариант не работает XXX(MyList, nil, PStrings(nil)^) почему-то
...
Рейтинг: 0 / 0
Опциональный входной параметр функции
    #40093457
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bzumsТак вот сделано

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

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


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

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

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

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


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