Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.05.2023, 11:27
bubaeshka bubaeshka вне форума
Прохожий
 
Регистрация: 20.02.2016
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Помогите с TPair

1. Не могу нигде найти информацию по этому самому пресловутому TPair. Что это такое? Применяются ли здесь конструкторы и деструкторы? Захотел себе такую штуку: TObjectList<TPair<integer,integer>> - компилятор заругался. Пропускает только простой TList<TPair<integer,integer>>. Но TList не очищает автоматически память. И я не могу понять, мне потом эти объекты TPair<integer,integer> - вручную удалять? или они примитивные? В документации вообще ничего нет толком.

2. Чтобы не плодить темы, спрошу второй вопрос здесь. К сожалению, как то я отстал от жизни совсем, хотя и "подучивал" другие ЯП, но в итоге... Сегодня набрёл на вот такую странную конструкцию:

Приведу здесь кусок кода:

Код:
var item:TDictionary<integer,integer>;
    zz,xx:TList<TPair<integer,integer>>;
    el:TPair<integer,integer>;
    Comparison:TComparison<TPair<integer,integer>>; 
begin
  item:=TDictionary<integer,integer>.Create;
  //очень подозрительная хрень
  Comparison:=
    function(const Left, Rigth: TPair<integer,integer>): integer
    begin 
      Result:=Left.Value-Rigth.Value; 
    end;
  //конец подозрительной хрени
  xx:=TList<TPair<integer,integer>>.Create(TComparer<TPair<integer,integer>>.Construct(Comparison));

Собственно... как я понимаю, я создаю в Comparison экземпляр класса TComparison, конструктору TList передаётся в параметре ссылка на интерфейс IComparer (интерфейсы? в Делфи? чё? ), которая есть результат функции Construct класса TComparer. Чё то я пока не допёр, как связаны Comparer и Comparison, но думаю допру, хотя если кто то ответит, я буду рад. Меня вот что волнует, как переменной Comparison можно присвоить функцию?

Код:
 //очень подозрительная хрень
  Comparison:=
    function(const Left, Rigth: TPair<integer,integer>): integer
    begin 
      Result:=Left.Value-Rigth.Value; 
    end;
  //конец подозрительной хрени

Почему у неё нет имени?

Видел подобные конструкции и в других языках, но не могу никак допереть как это работает. Код, украденный откуда то с просторов интернета, явно рабочий, но как можно писать код, работу которого, понимаешь только интуитивно? Что делает сама эта функция, мне объяснять не надо, тело функции может быть и не совсем верно, оно пока как "заглушка" (то есть вопрос, должна она возвращать только -1, 0, 1 или просто ноль, положительные и отрицательные значения, не важно какие - пока остаётся открытым). Что то писалось в интернетах по поводу проблем такого решения, типа классическое решение, с болтающейся в модуле непонятно куда пришитой, обычной функцией - работает быстрее и более безошибочно. Но мне не нравятся болтающиеся в модуле вспомогательные функции, которые не относятся ни к классу, ни являются подпроцедурами методов классов, бред какой то. В Делфи 7 процедура должна была быть вынесена за метод класса. Выглядела как мусор, а убери её и сортировки все накрылись, и правильная работа тоже....

Может есть какая то литература по современным возможностям делфи? Может и на русском даже есть (хотя сомнительно.....)? Или только док.эмбаркадеро.ком, стэковерфлоу и грабли?

Последний раз редактировалось bubaeshka, 22.05.2023 в 13:45.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:53.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter