Можно ли задать параметр процедуру по умолчанию?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
maxvell
незнакомец
Сообщения: 9
Зарегистрирован: 20.05.2012 15:37:42

Можно ли задать параметр процедуру по умолчанию?

Сообщение maxvell »

Нужно внутри сортировки использовать внешнюю функцию обмена двух элементов. При этом есть вариант, что этой функции не будет в фактических параметрах. Можно ли задать параметр по умолчанию в виде процедуры?

Предполагается нечто типа:

Код: Выделить всё

procedure SelectionSort(var A: Arr; n: range; 
swap: TSwapProc = @replace(var A: arr; i,j : range));


при попытке откомпилировать это, Free Pascal Compiler version 2.4.4-3.1 [2012/01/04] for i386 выдаёт ошибку:
sortings.pas(60,27) Error: Illegal expression
Последний раз редактировалось maxvell 20.05.2012 18:03:28, всего редактировалось 1 раз.
maxvell
незнакомец
Сообщения: 9
Зарегистрирован: 20.05.2012 15:37:42

Сообщение maxvell »


Спасибо, конечно, но это не то, что мне нужно. Мне нужно не просто передача функции как параметр, а именно присваивание параметра по умолчанию, то есть, по сути: исправить то, что я написал на то, что будет работать..
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Ну дык проверяйте параметр внутри процедуры и делайте с ним , что хотите. Хотя описанное напоминает функционал объекта
maxvell
незнакомец
Сообщения: 9
Зарегистрирован: 20.05.2012 15:37:42

Сообщение maxvell »

Ism писал(а):проверяйте параметр

Как же мне его проверить, если его вообще не будет? Мне как раз и нужно задать его по умолчанию, а компилятор этого делать не хочет, видимо, я неправильно пишу это присваивание "по умолчанию"..
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Тип данных параметра ?
maxvell
незнакомец
Сообщения: 9
Зарегистрирован: 20.05.2012 15:37:42

Сообщение maxvell »

Ism, type p1 = procedure(var A: arr; i, j: integer);
процедура типа p1
v-t-l
энтузиаст
Сообщения: 744
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

Может так?

Код: Выделить всё

procedure SelectionSort(var A: Arr; n: range;
swap: TSwapProc = @replace);
maxvell
незнакомец
Сообщения: 9
Зарегистрирован: 20.05.2012 15:37:42

Сообщение maxvell »

v-t-l, не, так тоже пробовал..
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

procedure SelectionSort(var A: Arr; n: range;
swap: TSwapObject;


Может в качестве параметра передавать объект выполняющий нужные функции ?
Если его не передавать , то swap будет nil и это можно проверить
maxvell
незнакомец
Сообщения: 9
Зарегистрирован: 20.05.2012 15:37:42

Сообщение maxvell »

Ism писал(а):Может в качестве параметра передавать объект выполняющий нужные функции ?

Спасибо за совет, сейчас попробую!
Ответить