![]() |
Механизм замены части данных в Powershell
Уважаемые товарищи, объясните мне, пожалуйста, одну вещь.
Вот есть какие-то данные, к примеру, список процессов, я их помещаю в переменную: Код:
$src = get-process |select name,product,ProductVersion |? product -match "операционная система" Код:
$piece = $src |? name -match smart Код:
$piece.name = "Умный экран" Код:
$src Кто-нибудь знаком с этим механизмом? |
Цитата:
Изменение размера массива, фактически создает новый массив и в этом случае, они уже не будут взаимосвязанными. Для иллюстрации: Код:
$a=,1 |
DJ Mogarych, как верно сказал коллега YuS_2, это поведение зависит от того, что происходит в конкретном языке при реализации операции присваивания объектных переменных в том или ином случае. В приведённом Вами случае, надо полагать, что некоей переменной X, стоящей слева от оператора присваивания, присваивается ссылка на ту же самую коллекцию объектов (в памяти), на которую ссылается некая переменная Y, которая находится справа от оператора присваивания. Где-то этим поведением можно управлять явно, где-то — неявно, а где-то — управлять вовсе нельзя (как было задано создателями языка, так, мол, и пользуйте).
|
Получается, что без изменения размеров область памяти одна, и переменные работают как фильтр, а если изменить размер, системе приходится создавать новый объект?
|
Цитата:
Цитата:
К сожалению, что и как реализовано можно только выучить. |
Цитата:
Что вы хотели сказать - непонятно, ибо написали то же самое, что написано в цитате, просто другими словами... нет? |
Цитата:
я описал реализацию, а вы - магию очень показательно, как ваше "то же самое" воспринял топикстартер: Цитата:
для списков определена операция добавления: Код:
> $a = New-Object 'System.Collections.Generic.List[int]' |
Цитата:
|
Цитата:
Самомнение у вас раздуто сильно. Если уж беретесь кулаком в грудь стучать, то описывайте не косноязычно: Цитата:
Что это за операция такая "Плюс что-то"? :) Цитата:
Там самый обычный массив: Цитата:
Код:
PS_5.1> $src = get-process |select name,product,ProductVersion Код:
$a = ,1 А потом проверьте: Код:
$a.length Вы же полезли на какой-то рожон и решили поумничать. Бог вам судья, пишите ещё... |
Цитата:
и самомнение раздуто у вас помимо вас тут есть ещё люди, и они тоже что-то пишут списки это пример того, что вывод из ваших слов получился неверный: Цитата:
Цитата:
Цитата:
Операции над списком ссылок сами объекты процессов не затрагивают, точно так же как и изменение отдельного свойства объекта не копирует и не замещает весь объект. Ссылка на него остаётся той же. |
Спасибо ВСЕМ, буду осмысливать!
|
Цитата:
Не морочьте голову ни себе, ни другим. Массивы (а у ТС, как раз System.Array) в powershell имеют ссылочный тип (об этом написано в спецификации), о чем и было сказано в самом начале. Вы же полезли в бутылку, чтобы это как-то оспорить - хотя о чем тут спорить? Вы утверждаете, что-то другое? Вижу, что нет. Тогда к чему был ваш комментарий с цитатой моих слов, вы КО? :) Не надо разводить здесь болота, чтобы пояснить эту простую вещь. И приплетать Си, Паскаль, да и упоминать синтаксис - абсолютно бессмысленно... PS А на счет моего самомнения - вы заблуждаетесь, оно у меня в подписи обозначено. |
Время: 20:50. |
Время: 20:50.
© OSzone.net 2001-