![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
процедурные ссылки
Scott Storch © (2011-02-18 11:36:00)можете в двух словах объяснить в чем преимущества процедурных ссылок, если к примеру мне нужно в компаратор передать функцию сортировки:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TMyRec = record
ID: Integer;
Name: string;
end;
TComparison<TMyRec> = reference to procedure(const Left, Right: TMyRec);
var
Form1: TForm1;
implementation
uses Math, Generics.Collections, Generics.Defaults;
{$R *.dfm}
function CmpMyRecs(const Left, Right: TMyRec): Integer;
begin
Result := CompareValue(Left.ID, Right.ID);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyRecs: TList<TMyRec>;
begin
MyRecs := TList<TMyRec>.Create;
try
// MyRecs.Add();
MyRecs.Sort(TComparer<TMyRec>.Construct(CmpMyRecs))
finally
MyRecs.Free;
end;
end;
end.
в чем разница, объявлю я процедурную ссылку или нет.
han_malign (2011-02-18 16:32:00) [1]
> или копи-паст?
- я еще и про ню-редукцию слышал... ;)
KSergey (2011-02-18 16:04:00) [2]> han_malign (18.02.11 13:15) [6]
> в C++ - подобные лямбда-примочки - на шаблонах - честно
> бета-редуцируются до линейного кода...
Скажи честно: сам придумал или копи-паст? :)
han_malign (2011-02-18 13:15:00) [3]в C++ - подобные лямбда-примочки - на шаблонах - честно бета-редуцируются до линейного кода...
в Delphi - generics - это синтаксический сахар в ущерб производительности... или прослойка в .NET...
RWolf (2011-02-18 12:11:00) [4]и да — closures.
RWolf (2011-02-18 11:58:00) [5]ссылка может указывать как на процедуру, так и на метод;
в параметрах функции вместо ссылочного аргумента можно вписывать анонимную процедуру.
Scott Storch (2011-02-18 11:42:00) [6]перед обычной функцией
DiamondShark (2011-02-18 11:41:00) [7]А зачем её объявлять, если она нигде не используется?
RWolf (2011-02-18 11:38:00) [8]преимущества перед чем?