![]() |
#1 |
NavAx
|
Баг в X++ - передача container в методы
Столкнулся с проблемой.
В общем, вкратце ситуация такова - при вызове метода с параметров типа container, такие параметры передаются только для чтения. За примером далеко ходить не надо. Вот класс c рекурсивным статическим методом. Если заменить параметры на int - посчитает до 10ти. Если с контейнером - зациклится, выдавая 1. Аксапта 3 SP3 CU1. PHP код:
PHP код:
|
|
![]() |
#2 |
Administrator
|
ИМХО, это не бага.
container является примитивным типом. Как и все переменные примитивных типов, переменные типа container передаются по значению.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
![]() |
#3 |
NavAx
|
Да на здоровье, пускай передаются.
Оно локально в методе не даёт изменить переданный параметр. Передача по значению не означает то, что переданный параметр невозможно изменить внутри метода, которому передали этот параметр. Посмотрите состояние переменной c до и после conpoke... |
|
![]() |
#4 |
Участник
|
Контейнеры нельзя изменять вообще. Замените conPoke на с=conPoke
|
|
![]() |
#5 |
NavAx
|
А функции con... к чему? Для красоты прикручены?
Вообще, забавно - тип данных есть, а изменять его нельзя... По идее, он тогда const должен называться... ![]() Насчет замены. А если у меня в контейнере сто элементов? В цикле в новый копировать? Потому что если впрямую присвоить, скажем PHP код:
P.S. Богатая справка на сайте, не хуже, чем в Аксапте... ![]() Баннеропоказы/клики зарабатываем? ![]() |
|
![]() |
#6 |
Участник
|
Цитата:
А функции con... к чему?
Цитата:
Богатая справка на сайте, не хуже, чем в Аксапте... ))))
Баннеропоказы/клики зарабатываем? ) |
|
![]() |
#7 |
Участник
|
PHP код:
![]() |
|
![]() |
#8 |
NavAx
|
Еще интересный эффект - создаем контейнер (by belougin)
PHP код:
Готово, Василий Иванович. |
|
![]() |
#9 |
NavAx
|
2 bagir.
Пробовал, результат монопенисуален. с2 становится read-only. Похоже, здесь какой-то глюк с распределением памяти/управлением объектами типа container.... |
|
![]() |
#10 |
Участник
|
еще есть Array, List, Set, временная таблица
|
|
![]() |
#11 |
Модератор
|
А хотелось-бы все-таки контейнер, раз уж такой тип есть.
|
|
![]() |
#12 |
NavAx
|
В общем говоря - баг налицо, о чем изначально и был пост.
Что можно сделать в обход - это само собой разумеется. ![]() |
|
![]() |
#13 |
Участник
|
ничего не понимаю
![]() у меня Ax3.0SP3, всё работает нормально PHP код:
|
|
![]() |
#14 |
Участник
|
conins(c2,1,t+1); создает новый контейнер - копию со вставленным элементом и возвращает его. Если резщультат функции никуда не девать, ее использовать бессмысленно
PHP код:
|
|
![]() |
#16 |
NavAx
|
#&##@!!!
Блин, запарка косит наши ряды... Оно ж _возвращает_ изменённый контейнер, ёклмн... Сто лет контейнерами не баловался - и вот приехал. ![]() ![]() ![]() |
|
![]() |
#17 |
Участник
|
Понял, человек просто запутался, он думает, что контейнерные функции правят тот контейнер, который передаётся в параметрах. Наверное проглядел, что контейнерные функции возвращают новый контейнер (как бы изменённый старый).
|
|
![]() |
#18 |
Administrator
|
Собственно, речь об этом изначально и была.
container - тип примитивный! больше всего он похож на str. И он всегда передается по значению. Если вы в conins() передаете контейнер по значению, то получить измененный контейнер вы можете только как результат функции. Вспомните для примера функции strdel(), strins() и т.п.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
![]() |
#19 |
NavAx
|
Мля, ну всё, всё, запарили... началось тут чтение истин...
Не обратил внимание, что функция еще и возвращает что-то. |
|
![]() |
#20 |
Участник
|
PS "Тип передается по.." - это вообще не по-русски. Плохой перевод. Поэтому отчасти и воспринимается с трудом, о чем собственно речь.
|
|
|
![]() |
||||
Тема | Ответов | |||
gatesasbait: Quicksort on a container | 1 | |||
SysUsersOnlineHolder - баг в 3.0 | 0 | |||
Найти display методы | 12 | |||
axaptapedia: Container | 0 | |||
Dynamics AX Geek: Storing objects in a container | 0 |
|