Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.17;
Скачать: CL | DM;

Вниз

Коллизия имён функций. Общий вопрос.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.036 c
15-1200625207
Slider007
2008-01-18 06:00
2008.02.17
С днем рождения ! 18 января 2008 пятница


15-1200217927
andreil
2008-01-13 12:52
2008.02.17
Как добавить в TTreeView простую строку?


15-1200544927
Slider007
2008-01-17 07:42
2008.02.17
С днем рождения ! 17 января 2008 четверг


6-1180615621
Alex_C
2007-05-31 16:47
2008.02.17
Получить данные через https протокол


2-1201238792
zsv
2008-01-25 08:26
2008.02.17
Количество слов в htm-документе