| 
			
			 | 
		#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 | |||
		
  |