Имя: Пароль:
1C
1С v8
Какие типы являются ссылочными и хранят данные родителя , а какие нет?
, ,
0 FidelBoom
 
18.11.13
11:17
Не знаю, как это называется и как это конкретно объяснить. Суть в следующем..
Допустим когда в коде мы приравниваем структуру к другой, например
Структура = Новый Структура;
Структура.Вставить("Число",45);

ПодчиненнаяСтруктура = Структура;

И вот есть мы теперь очистим или изменим первую "Структуру", то измениться и вторая структура тоже, это объясняется тем, что "ПодчиненнаяСтруктура" содержит ссылку на первую и при изменении первой автоматически меняется ссылка.
Но например с массивом дела обстоят иначе от структуры, то есть если вместо структур будут 2 массива , то второй массив изменять не будет.
Думаю, как это определятся, например что будет с Списком значений? ну и прочие типы переменных. Как это определить скопируется он или будет содержать ссылку?
1 Wobland
 
18.11.13
11:22
>если вместо структур будут 2 массива , то второй массив изменять не будет
Это сообщение представляет вранье. Я, конечно, не могу знать, в каком именно кафе-шантане сфабриковано это вранье. Но как бы ни врал ТС, он легко может взять и проверить.
2 Infsams654
 
18.11.13
11:24
(0) написано же "содержит ссылку на первую " - что есть в Структура, то видит и ПодчиненнаяСтруктура.
(1) да, вранье "при изменении первой автоматически меняется ссылка", как она меняется, ежели ПодчиненнаяСтруктура = Структура;
3 FidelBoom
 
18.11.13
11:26
(1) Вчера проверял,
Если написать следующее:
Массив = Новый Массив;
Массив.Добавить(123);
Массив.Добавить("Строка");

Массив2 = Массив;

Массив.Очистить();
//Далее если посмотреть отладчиком "Массив" - будет пустой, а в Массив2 - буду значения "массив".

А если были бы структуры они очистились бы обе. Разве не правда? Вчера проверял, своими глазами видел, или мне показалось?
4 Wobland
 
18.11.13
11:28
(3) проверь сегодня
5 FidelBoom
 
18.11.13
11:29
(2) Меняется ссылка.. я имел ввиду , что данные в ссылке изменяются , сама ссылка остается той же, изменяется в смысле, изменяются ее данные. Вот . Извините.
А в массиве взаимосвязи нет. Вот я и хочу узнать где это определить, а то я в синтакс помощник на каждый подобный объект буду лахить.

(3)Ок. Сейчас проверю. Спс.
6 FidelBoom
 
18.11.13
11:30
Не в синтакс помощник, а в отладчик лазаю. Вообщем , мдаа день сегодня будет не очень
7 Господин ПЖ
 
18.11.13
11:30
>а то я в синтакс помощник на каждый подобный объект буду лахить

стесняюсь спросить зачем...
8 Dethmont
 
18.11.13
11:30
Массив = Новый Массив;
Массив.Добавить("Число");

Мас = Массив;
    
Массив.Вставить(0,"Текст");
    
Сообщить("В новом массиве - "+Мас[0]);
9 Wobland
 
18.11.13
11:31
напугал, плин
http://i.imgur.com/HsBH40G.png
10 Wobland
 
18.11.13
11:31
(9) точка останова на возврате
11 FidelBoom
 
18.11.13
11:56
Вот скрин, думаю в нем все понятно
http://yadi.sk/d/cDcC3zHpCs3qY
12 1dvd
 
18.11.13
12:01
(11) ты массивы не менял, а просто менял ссылки в разных переменных. Потому такой эффект
13 ДенисЧ
 
18.11.13
12:03
Число, строка, булево, дата - не по ссылкам.
14 Serg_1960
 
18.11.13
12:05
(имхо) всё становится легко и ясно, если запомнить простое правило: в переменных примитивного типа - значения, не примитивного типа - ссылки на значения (область памяти)...
15 Serg_1960
 
18.11.13
12:08
(13) + NULL и Неопределено :( про них, почему-то, всё время забывают :)
16 Infsams654
 
18.11.13
12:11
(11) и что? Так оно и должно быть.
В МассивНаследуемая видно то что было создано изначально в МассивРодитель. МассивРодитель = Массив3; - Переменная МассивРодитель поменялась на Массив3 - это не значит, что область памяти под МассивРодитель изменилась
17 FidelBoom
 
18.11.13
12:13
Спасибо всем
18 1dvd
 
18.11.13
12:18
я тут с другой фиговиной сталкивалсо. ТаблицаЗначений например, всегда передается по ссылке. Даже с служебным словом "Знач"

Процедура ППП()
    ТЗ = Новый ТаблицЗначений();
    ТЗ.Колонки.Добавить("Колонко1");
    НоваяСтрока = ТЗ.Добавить();
    НоваяСтрока.Колонко1 = "Ну, типа, значение";
    ОбработатьТЗ(ТЗ);
    Сообщить("" + ТЗ.Количество); // Сообщает 0
КонецПроцедуры

Процедура ОбработатьТЗ(Знач ТЗ)
    ТЗ.Очистить();
КонецПроцедуры
19 ДенисЧ
 
18.11.13
12:19
(18) Это не фиговина. Это описанная возможность платформы.
20 fisher
 
18.11.13
12:49
(19) Невнятную статью на ИТС я бы не назвал описанной возможностью платформы. Хотя, примерчик там как раз для ТЗ жевался... Тогда ладно :)