Это только если посмотреть на тип принимающей переменной?
Да.
Это, на мой взгляд, веский аргумент против разрешения функцииСинтаксис вызова, чтобы опустить парены. Если бы этой языковой функции не существовало, вы должны были бы написать:
I := AnIntFun();
IntFun := AnIntFun;
Если бы вы были вынуждены написать ее таким образом, то компилятор будет рассматривать
I := AnIntFun;
как синтаксисошибка. Выражение AnIntFun
всегда будет иметь процедурный тип, и компилятору (и читателю) не нужно будет полагаться на контекст для определения типа выражения.
Использование контекста для определения типа выраженияочень нежелательно. Рассмотрим, например, перегрузку функций экземпляра:
procedure foo(fun: TIntFun); overload;
procedure foo(val: Integer); overload;
Когда вы пишете:
foo(AnIntFun);
Какую перегрузку вы считаете выбранной? Если язык требует паренсов при каждом вызове функции, тогда AnIntFun
всегда имеет процедурный тип, и первая перегрузка будет выбрана без двусмысленности.