Мне было интересно о очень странном поведении в бесплатных паскальных функциях, described in docs.Почему я могу использовать имя функции в pascal как имя переменной без определения?
Говорят, что следующий код будет скомпилирован/успешно выполнен:
function Test : integer;
begin
Test := 2;
end;
begin
WriteLn(Test());
end.
Но если я использую имя функции Test
в правой части уравнения, она будет выполнять рекурсивный цикл.
Таким образом, функции pascal, с одной стороны, определяют переменную с их именем Test
и тип возвращаемого значения функции integer
. С другой стороны, вы все равно можете вызвать функцию (сделать рекурсивный вызов, используя свое имя).
Почему? Какова цель?
В этом нет ничего плохого. Почему бы вам не сделать рекурсию. Ответственность разработчика за то, чтобы проверить их код, имеет смысл и может правильно закончить –
@DavidBrossard полностью согласился с рекурсией - он поддерживается на самых популярных языках программирования. Я смущен об автоопределенной переменной с именем функции. – avasin