Форум: "Начинающим";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];
ВнизКоллизия имён функций. Общий вопрос. Найти похожие ветки
← →
Skyle © (2008-01-22 07:59) [0]Есть большой проект на D5. В нём используется некий самописный модуль MyVariants, в котором есть самописная же функция VarToDateTime. При попытке перебраться на D7 столкнулись с проблемой неоднозначности: в D7 варианты вынесены в отдельный юнит Variants и в нём есть такая же функция (но с иной реализацией). Да, в D5 она тоже есть, но там она была в system и не мешала.
Собственно вопрос: Как можно решить эту проблему (родная функция VarToDateTime нам не нужна)?
Генофонд править не хочется, гарантировать порядок MyVariants и Variants в uses я не могу, административные меры не подействуют.
Пока что наиболее приемлемое решение - переименовать нашу функцию. Но народ привык уже к её названию, так что ошибки не за горами.
← →
Сергей М. © (2008-01-22 08:23) [1]dt := MyVariants.VarToDateTime(..);
?
← →
Юрий Зотов © (2008-01-22 08:24) [2]Можно в тексте заменить VarToDateTime на MyVariants.VarToDateTime. Но ошибки все равно будут не за горами. Потому что народ будет забывать указывать модуль.
← →
Skyle © (2008-01-22 08:25) [3]
> Сергей М. © (22.01.08 08:23) [1]
Хм... Это по-моему похоже на переименование нашей функции...
← →
Skyle © (2008-01-22 08:27) [4]
> Юрий Зотов © (22.01.08 08:24) [2]
Да, всё так и есть.
Похоже нужно будет переименовать нашу функцию и сделать некую программку, которая перед билдом будет искать вхождениее названия VarToDateTime и сигнализировать. На случай, если кто-нибудь забудет.
← →
Юрий Зотов © (2008-01-22 08:39) [5]> Skyle © (22.01.08 08:27) [4]
Эту функцию лучше выполнить в виде эксперта и вживить прямо в IDE (см. BeforeCompile в ToolsAPI.pas). Еще вариант: добавить в Вашу функцию фиктивный (неиспользуемый) параметр, чтобы ее заголовок отличался от штатной.
← →
Skyle © (2008-01-22 08:47) [6]
> Юрий Зотов © (22.01.08 08:39) [5]
Про эксперта думал, сейчас это непринципиально. Скорее всего именно он и будет.
А по поводу параметра не совсем понял. Предлагаете передавать его постоянно в явном виде?
Потому как изменение декларации сfunction VarToDateTime(AValue : Variant) : TDateTime;
наfunction VarToDateTime(AValue : Variant; ADummy : Integer = 0) : TDateTime;
ничего не даст.. А передавать мусор несколько накладно.
Но всё равно спасибо за идею.
← →
Юрий Зотов © (2008-01-22 08:51) [7]Дефолтный параметр, конечно, не годится. И передавать мусор не есть гуд - но что ж делать, раз уж так вышло?
Я бы переименовал функцию и вживил эксперт.
← →
Skyle © (2008-01-22 08:52) [8]
> Юрий Зотов © (22.01.08 08:51) [7]
Да, на этом пожалуй и остановимся.
Всем спасибо, тему можно закрыть.
← →
Ega23 © (2008-01-22 10:11) [9]
> Skyle ©
Обрати внимание на то, что работа с вариантами в D5 отличается от работы с вариантами в D7
пример:const a = 5;
function Foo(v : variant):Boolean;
begin
Result := Vartype(v)=varInteger;
end;
Так вот, если мне не изменяет память, в delphi5 вызов Foo(a) даст True, а в Delphi7 - False.
← →
Skyle © (2008-01-22 10:21) [10]
> Ega23 © (22.01.08 10:11) [9]
Да, есть такое, примем к сведению.
Спасибо.
← →
Anatoly Podgoretsky © (2008-01-22 19:14) [11]> Ega23 (22.01.2008 10:11:09) [9]
А с чего ты взял, что А это Integer?
← →
Ega23 © (2008-01-22 19:24) [12]
> А с чего ты взял, что А это Integer?
Я в курсе, что это varByte. Просто в пятёрке такая конструкция прокатывала. Я где-то полтора года назад как раз тему по этому вопросу поднимал, когда проет с пятёрки на семёрку переводили.
← →
Kolan © (2008-01-22 19:28) [13]Открыть модуль/проект в BDS и рефакторингом изменить имя, он изменит все что надо.
← →
Anatoly Podgoretsky © (2008-01-22 19:40) [14]> Ega23 (22.01.2008 19:24:12) [12]
То есть понимаешь, что это зависит от реализации.
← →
Skyle © (2008-01-23 07:30) [15]
> Ega23 © (22.01.08 10:11) [9]
Кстати, Олег, похоже это лечится. Variants.
// If TRUE then when variants are created we will try to create the smallest
// type possible. Set this to FALSE to simulate Delphi v5 behavior.PackVarCreation: Boolean = True;
← →
Ega23 © (2008-01-23 09:15) [16]
> То есть понимаешь, что это зависит от реализации.
Конечно. Просто аккурат полтора года назад как раз пытался выяснить, можно ли как-то вмешаться в правила прикастовывания. Оказалось - нельзя.
> PackVarCreation: Boolean = True;
Не знал. Сейчас почитаю.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c