![]() |
#1 |
Участник
|
Switch по контейнеру на сервере в дебаге валит сервер:)
X++: static server void main(Args _args) { ; switch ([tablenum(InventTable), tablenum(LedgerTable)]) { case [tablenum(InventTable), tablenum(LedgerTable)]: info('test'); } } ![]() Проверено на 2009 и 2012 R3. |
|
|
За это сообщение автора поблагодарили: mazzy (2), S.Kuskov (3), xiety (1). |
![]() |
#2 |
Участник
|
Проверил в 2009. Падает
![]() |
|
![]() |
#3 |
Боец
|
Я бы на месте сервера тоже упал бы, увидев такую конструкцию
![]() |
|
|
За это сообщение автора поблагодарили: mazzy (2), AlGol (1), madm (1). |
![]() |
#4 |
Талантливый разгвоздяй
|
Действительно, а какой смысл такой конструкции?))
|
|
![]() |
#5 |
Участник
|
Что-то типа Decision table
|
|
![]() |
#6 |
Участник
|
|
|
![]() |
#7 |
Участник
|
Баги сервера потихонечку переселяются в мозг X++ программиста и поражают его часть, отвечающую за логику
![]() Почему контейнеры можно сравнивать и использовать в качестве ключа у map но использование в case - это что-то запредельное? |
|
|
За это сообщение автора поблагодарили: skuull (1). |
![]() |
#8 |
Участник
|
|
|
![]() |
#9 |
Талантливый разгвоздяй
|
Ну против контейнера в свиче ничего не имею, пример удивил.. Искал тайный смысл.
|
|
![]() |
#10 |
Участник
|
Цитата:
Цитата:
Resolved this bug as ‘Won’t Fix’. We can consider this for fixing when we have customer reporting this issue.
Also, this seems to be a corner scenario where in we are using the Switch statement is using the container type. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#11 |
Участник
|
|
|
![]() |
#12 |
Боец
|
Цитата:
![]() Ничего запредельного, но конструкция неудачная - нетипичная, редкая (если вообще где-то встречается), режет глаз, вводит в ступор, нечитабельна. В данном тестовом примере ее еще можно прочесть - контейнер "раскрыт". Если же там будут переменные кейзиться, то будет еще сложнее. Наличие бага в последней версии системы подтверждает неюзабельность конструкции и не вызывает удивления. В целом же, я избегаю использование контейнеров настолько, насколько это возможно (разве что str2con/con2str) и всем настоятельно рекомендую. Ну а глядя в целом на AX2012, на ее новые фреймворки, UIs, схватившись за голову, становится очевидным, что у MS-разработчиков вообще нет понятия запредельности... Уверен, вы еще не раз нас удивите и не такими конструкциями ![]() |
|
![]() |
#13 |
Участник
|
|
|
![]() |
#14 |
Участник
|
workaround или точнее сказать debugaround:
X++: switch (true) { case [tablenum(InventTable), tablenum(LedgerTable)] == [tablenum(InventTable), tablenum(LedgerTable)]: info('test'); } |
|
![]() |
#15 |
Участник
|
Цитата:
X++: container key = [x, y]; if (key == [1, 2]) { } else if (key == [2, 3]) { } else { } |
|
![]() |
#16 |
Участник
|
Чисто теоретически в switch можно при необходимости пропустить break
![]() P.S.: Вот в этой ветке уже было обсуждение elseif VS switch Последний раз редактировалось S.Kuskov; 26.09.2014 в 10:11. |
|