Показать сообщение отдельно
  #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 процедура должна была быть вынесена за метод класса. Выглядела как мусор, а убери её и сортировки все накрылись, и правильная работа тоже....

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