Форум: "Прочее";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
ВнизКакой должен быть язык Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.079 c