Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.08;
Скачать: CL | DM;

Вниз

Какой должен быть язык   Найти похожие ветки 

 
Alkid ©   (2007-03-16 17:12) [40]

Reflection - это возможность получать информацию о структуре типов в run-time.
Т.е. списки методов, пропертей, полей и т.п. классов.

First-class functions - это функции, которыми можно оперировать, как другими значениями, т.е. передавать как параметры в другие функции и возвращать как результат выполнения. В принципе, наличие указателей на функции в паскале делает это возможным, но не без извратов.


 
REA   (2007-03-16 17:15) [41]

И как адресоваться к Num например? (а не к N)
Т.е. можно присвоить Facts.Kind := Num; но зачем?


 
jack128 ©   (2007-03-16 17:17) [42]

Alkid ©   (16.03.07 17:12) [40]
В принципе, наличие указателей на функции в паскале делает это возможным, но не без извратов.


В чем изврат то?


 
REA   (2007-03-16 17:17) [43]

>Reflection - это возможность получать информацию о структуре типов в run-time.

Это круче реализовано, чем RTTI?

>В принципе, наличие указателей на функции в паскале делает это возможным, но не без извратов.

Да вроде не было с этим сложностей. В C# ввели какие то делегаты... до конца не понял где тут удобство.


 
clickmaker ©   (2007-03-16 17:25) [44]


> В C# ввели какие то делегаты

как не назови - суть одна. Указатель на точку входа в некую функцию
В VB так прямо и пишут AddHandler ... AddressOf func


 
Alkid ©   (2007-03-16 17:28) [45]


> В чем изврат то?

Ну хорошо, вот напиши мне на паскале функцию, которая принимает в качестве параметров две функции, вида
function (i : double) : double;

И возвращает функцию такого же вида, которая вычисляет сумму этих двух фукнций?

Я на лету не могу сообразить, как это сделать на паскале.


 
Alkid ©   (2007-03-16 17:29) [46]


> Это круче реализовано, чем RTTI?

Да. RTTI в Delphi работает только по published типам, да и там его возможности послабее. Но цели преследуются одни и те же.

> Да вроде не было с этим сложностей. В C# ввели какие то
> делегаты... до конца не понял где тут удобство.

Делегаты есть и в Дельфи.
Сложности - я тут jack128 задачку задал.


 
clickmaker ©   (2007-03-16 17:30) [47]


> И возвращает функцию такого же вида, которая вычисляет сумму
> этих двух фукнций?

type TFunc=function(...);
TFunc может быть и возращаемым значением, если уж очень надо


 
Alkid ©   (2007-03-16 17:30) [48]


> как не назови - суть одна. Указатель на точку входа в некую
> функцию

Не совсем. Если речь идёт статической (читай - глобальной) функции, то да.
А если о instance method, то надо хранить ссылку на экземпляр и на точку входу.


 
Alkid ©   (2007-03-16 17:31) [49]


> type TFunc=function(...);
> TFunc может быть и возращаемым значением, если уж очень
> надо

Ну и что? Ты мне код приведи, плз, а тут только описание типа.


 
clickmaker ©   (2007-03-16 17:33) [50]


> Ты мне код приведи, плз

задача до конца не понятна и кажется слишком уж притянутой за уши...
в каком случае такой изврат нужен?


 
jack128 ©   (2007-03-16 18:05) [51]

Alkid ©   (16.03.07 17:28) [45]
И возвращает функцию такого же вида, которая вычисляет сумму этих двух фукнций?


А то, что должна возвращаться именно функция - это так принципиально?  Чем объект/интефейс - плох?

Если я правельно понял задачу, то так например:

TFunc = function (D: Double): Double;
IFuncSummator = interface
 function GetSum(D1, D2: Double): Double;
end;
TFuncSummator = class(TInterfacedObject, IFuncSummator)
private
 F1, F2: TFunc;
public
 constructor Create(Arg1, Arg2: TFunc);
 function GetSum(D1, D2: Double): Double;
end;

function GetSummator(F1, F2: TFunc): IFuncSummator;
begin
 Result := TFuncSummator.Create(F1, F2);
end;

использование:

var
 Summator: IFuncSummator;
begin
 Summator := GetSummator(@Sin, @Cos);
 ShowMessage(FloatToStr(Summator.GetSum(0.5, 0.9)));
end;


 
Игорь Шевченко ©   (2007-03-16 18:07) [52]

Alkid ©   (16.03.07 17:28) [45]

Ну не является паскаль языком функционального программирования, не Эрланг он нифига. Что же теперь, застрелиться ?



Страницы: 1 2 вся ветка

Текущий архив: 2007.04.08;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.041 c
2-1174086717
Expell
2007-03-17 02:11
2007.04.08
Time


2-1173983823
bagos
2007-03-15 21:37
2007.04.08
stringgrid и listbox


1-1171563295
Алексей С.
2007-02-15 21:14
2007.04.08
Предпросмотр печати


2-1174147480
vegarulez
2007-03-17 19:04
2007.04.08
Как отловить нажатие кнопки минуса.


3-1169117281
samalex
2007-01-18 13:48
2007.04.08
Подключение к MySQL