|
14.12.2009, 10:43 | #1 |
Участник
|
bug в ax3kr3 confind
Рбнаружил в KR3 такой очень неприятный баг: если в контейнере содержится пустое строковое, то confind при поиске значения отсутствующего в контейнере выдает позицию пустой строки!
как с таким багом люди на KR3 работают (или я может чего то не знаю)? в каком релизе все нормально работает? X++: static void Job167(Args _args) { container c = [3,5,"","",8]; int i; ; i = confind(c,2); // found 3 bug! i = confind(c,3); i = confind(c,4); // found 3 bug! i = confind(c,5); }
__________________
--- SHiSHok Последний раз редактировалось SHiSHok; 14.12.2009 в 10:52. |
|
|
За это сообщение автора поблагодарили: Bishop (2), Logger (3). |
14.12.2009, 12:43 | #2 |
Участник
|
В AX 4.0 SP2 уже исправлено.
Проверил у себя на AX 3.0 KR3 - действительно работает некорректно! Причем, если в контейнере искомый элемент стоит дальше пустого значения, то все равно confind() возвращает индекс первого пустого значения. Похоже, редко confind() применяли (и применяют) к контейнерам с разнотиповыми элементами... Еще, поиск пустой строки в контейнере всегда возвращает первый нестроковый элемент... (в той же AX 3.0 KR3): c = ["A","B",1,2,3,""] confind(c, "") = 3 |
|
14.12.2009, 12:51 | #3 |
Участник
|
Проверил в АХ 2009. Там уже все ОК.
Честно говоря, с таким поведением немного стремно было бы работать. Хотя, confind не такая уж и частая операция, если так подумать. |
|
14.12.2009, 14:08 | #4 |
Участник
|
не сказал-бы, если посмотреть в АОТ
__________________
--- SHiSHok |
|
14.12.2009, 17:47 | #5 |
Участник
|
свою функцию корректного поиска в контейнере то написали, но не хотелось бы таким способом исправлять ошибку.
есть идеи как минимальными затратами устранить баг?
__________________
--- SHiSHok |
|
14.12.2009, 18:08 | #6 |
Участник
|
Откажитесь от хранения в контейнере данных, по которым вы осуществляете поиск Вообще, много раз уже с этими контейнерами возникали косяки, я лично, если нужно что-то куда-то "складывать" по ходу работы и потом это искать/доставать, использую Set или Map.
|
|
15.12.2009, 10:58 | #7 |
Участник
|
Цитата:
Т.о. можно сказать что под вопросом функционирование всего приложения в KR2,3. Как я понимаю, линейка версии 3 больше не поддерживается и не фиксится? а может и они уже неправильно работают
__________________
--- SHiSHok Последний раз редактировалось SHiSHok; 15.12.2009 в 11:02. |
|
15.12.2009, 11:37 | #8 |
Участник
|
Цитата:
1) требуется хранить разнотиповые значения (это можно обойти использованием в качестве ключа тех же контейнеров); 2) требуется хранить повторяющиеся элементы; 3) требуется хранить значения в порядке поступления, а не в сортированном виде; Ну, и еще, контейнеры удобнее передавать между классами и просматривать их содержимое в дебаггере. Цитата:
Если вы найдете в стандартной аксапте место применения confind() к контейнеру, потенциально содержащему разные типы, тогда можно ставить под вопрос... Думаю, что не найдете |
|
|
За это сообщение автора поблагодарили: alex55 (1). |
15.12.2009, 12:28 | #9 |
Участник
|
Цитата:
раз у народа работает KR3 и никто до сих пор этого глюка не заметили, то надеюсь что не найду. А вот в функционале наших поставщиков этих контейнеров... очень любили они их (собственно там и напоролся).
__________________
--- SHiSHok |
|
15.12.2009, 22:04 | #10 |
Участник
|
Цитата:
Цитата:
|
|
|
За это сообщение автора поблагодарили: alex55 (1). |
14.12.2009, 17:59 | #11 |
Участник
|
Вообще-то, с ошибкой будет искать и собственно пустую строку
X++: i = confind(c,""); // found 1 bug! Другой вариант - вместо пустой строки записывать некий спец.символ. Например, num2char(1). Как ни странно, но num2char(0) ведет себя также как и пустая строка. Да, кстати, в AX2.5 этого глюка не было. ========================================== Ну, и еще один вариант поиска, правда, не для всех типов данных X++: print strScan(","+con2str(c)+",",strFmt(",%1,",2),1,1000); print strScan(","+con2str(c)+",",strFmt(",%1,",3),1,1000); print strScan(","+con2str(c)+",",strFmt(",%1,",""),1,1000); pause; Последний раз редактировалось Владимир Максимов; 14.12.2009 в 18:06. |
|
15.12.2009, 22:27 | #12 |
Участник
|
Интересно, а имеет смысл требовать хотфикса для этого глюка или из-за окончания поддержки трешки это бессмысленно ? Если не ошибаюсь гарантировался выпуск фиксов только для критичных багов.
|
|
16.12.2009, 00:40 | #13 |
Участник
|
Цитата:
Я сам слабо представляю такую ситуацию. И то, что это выявлено (по крайней мере, на axforum) в конце 2009 года, говорит само за себя. |
|
16.12.2009, 02:05 | #14 |
Участник
|
Цитата:
В будущее мы смотрим, назад не оглядываемся |
|
16.12.2009, 11:13 | #15 |
Участник
|
Баг я бы сказал критичный и многие клиенты еще долго будут на 3-й версии работать. Но, учитывая как из мелкософта тяжело все выбивается, думаю что финал 3й версии останется с дыркой
__________________
--- SHiSHok |
|
Теги |
confind, container, ошибка |
|
|