Re[57]: Как мало людей понимает ООП...
От: Jack128  
Дата: 18.08.12 21:01
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, Sinclair, Вы писали:


I>>>
I>>>     type
I>>>          pProc = procedure(s:string);
I>>>     function X(s:string):pProc;far;
I>>>          procedure X1;far;
I>>>          begin;
I>>>               WriteLn(s);
I>>>          end;
I>>>     begin;
I>>>          X := @X1;
I>>>     end;
I>>>

S>>Отличный пример. А что мешает ему скомпилиться? Извини, у меня TP для проверки нету.

I>Тип pProc можно использовать для параметра, но нельзя для возвращаемого значения, это можно обойти хаком.


I>>>Ну и мануал, там есть подсказка

S>>Ну вот в подсказке вроде очень похожий пример. Неужели TP умеет escape-analysis и запрещает передавать адреса вверх по стеку, разрешая вниз?

I>В этом месте в турбопаскале большая дыра, почти ничем не прикрытая.


Сразу говорю — ничего не знаю про класический паскаль, говорю про дельфи(начиная с D3, не знаю, что там раньше было).
Так вот, в дельфи — ты сам лично заткнул глотку компилятору, вызвав оператор @.
По хорошему нужно писать X := X1; Тогда те компилер скажет, что возвращать ссылку на вложенную процедуру — очень плохо. как только ты взял указатель на процедуру — то с ним ты естественно волен делать что хочешь, указатель — это всего лишь указатель..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.