Значение по умолчанию для var-параметра

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Значение по умолчанию для var-параметра

Сообщение and » 08.08.2014 19:58:17

Попытался обновиться на транковый FPC 2.7.1 (r26374). И столкнулся с ошибкой компиляции
Код: Выделить всё
Error: Default values can only be specified for value, const and constref parameters
С одной стороны, это соответствует документации:
Note that default values are not supported for variable parameters.
С другой стороны, раньше проходило, в т.ч. и на более старой (полуторагодичной давности) ревизии 2.7.1. Свидетельство чему есть и в самОм Lazarus'е:
Код: Выделить всё
    function GetCharMix(const LinePos, Indent: Integer;
                        var IndentCharsFromLinePos: Integer = 0): String;
(Модуль synbeautifier.pas, класс TSynBeautifier).
Сейчас этот модуль не компилируется, если не убрать "=0".
 
Собственно, вопрос: это баг внесли или исправили? Соответственно, репортить на bugs.freepascal.org или править код, где это использовалось?
В User_Changes_Trunk и на багтрекере ничего про такое изменение поведения не нашёл.
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Re: Значение по умолчанию для var-параметра

Сообщение sign » 09.08.2014 06:06:58

Править.

Сами себе задайте вопрос, зачем нужно var, в каких случаях.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Значение по умолчанию для var-параметра

Сообщение and » 11.08.2014 17:00:59

sign писал(а):Сами себе задайте вопрос, зачем нужно var, в каких случаях.
Оно как бы понятно и без вопроса... но:
1) Это значение может быть и не нужно вызывающей стороне. Отсутствие default'а вынуждает всё равно описывать переменную под этот параметр. (Пример - вызов Val, когда нас не интересует позиция ошибочного символа).
2) default было удобно использовать в качестве инициализирующего значения. Например, в описании типа для обработчика события. Сейчас инициализацию придётся вставлять в метод, вызывающий этот обработчик.
sign писал(а):Править.
Интересно, а почему исправили synbeautifier.pas или хотя бы не отрепортили? Неужели никто не собирал Lazarus после этих изменений?! 8-o
 
Кстати, кто-нибудь в курсе, с какой (хотя бы примерно) ревизии FPC началось такое поведение?
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Re: Значение по умолчанию для var-параметра

Сообщение sign » 12.08.2014 07:22:45

and писал(а):
sign писал(а):Сами себе задайте вопрос, зачем нужно var, в каких случаях.
Оно как бы понятно и без вопроса... но:
1) Это значение может быть и не нужно вызывающей стороне. Отсутствие default'а вынуждает всё равно описывать переменную под этот параметр. (Пример - вызов Val, когда нас не интересует позиция ошибочного символа).

Волшебное средство - overload.
А если это стандартная функция?

И её перекрываем

FPC 2.7.1
Код: Выделить всё
Function ParamStr(Param : Integer) : Ansistring; inline;
Function ParamStr(var Q: String) : Ansistring;

implementation

Function ParamStr(Param : Integer) : Ansistring;
begin
  Result := ObjPas.ParamStr(Param);
end;

Function ParamStr(var Q: String) : Ansistring;
begin
  // Фигачим нужное
end;



2) default было удобно использовать в качестве инициализирующего значения. Например, в описании типа для обработчика события. Сейчас инициализацию придётся вставлять в метод, вызывающий этот обработчик.[/quote]
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Значение по умолчанию для var-параметра

Сообщение and » 12.08.2014 16:59:51

sign писал(а):Волшебное средство - overload
Бритва Оккама возражает ;-)
К тому же по второму пункту перегрузка никак не поможет. Или предложите, как перегрузить процедурный тип? (Что-нибудь a-la TCloseQueryEvent).
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru