Оператор присваивания = «Устанавливает значение переменной в указанное значение», как указано в справочном документе .Не удивительно, что изменения в переменной (в моем случае массив), которая была ранее назначена другой переменной, не влияют на значение этой последней.
PS C:\> $V="a", "b", "c"
PS C:\> $A=$V
PS C:\> write-host "A before new value of V: $A"
A before new value of V: a b c
PS C:\> $V="e","f"
PS C:\> write-host "A after new value of V: $A"
A after new value of V: a b c
PS C:\>
Но когда используется метод clear (), поведение кажется другим.
PS C:\> $V="a", "b", "c"
PS C:\> $A=$V
PS C:\> write-host "A before clearing V: $A"
A before clearing V: a b c
PS C:\> $V.clear()
PS C:\> write-host "A after clearing V: $A"
A after clearing V:
PS C:\>
Кажется, что метод clear (), применяемый к $ V, действует и на $ A.Как будто назначение было по ссылке, как ни странно, только для этого метода.Фактически, если новое значение назначено $ V после его очистки, на $ A все еще влияет только очистка.
PS C:\> $V="a", "b", "c"
PS C:\> $A=$V
PS C:\> write-host "A before clearing V: $A"
A before clearing V: a b c
PS C:\> $V.clear()
PS C:\> $V="e","f"
PS C:\> write-host "A after clearing V: $A"
A after clearing V:
PS C:\>
Существуют возможности избежать этого эффекта, хотя и не совсем идентичные: $ A = $ V.clone () или использование командлета Clear-Variable -name V или $ V = $ null вместо $ V.clear () или, возможно, другие лучше, чем те, которые кто-то может предложить.
Но мой вопрос:
как объяснить "распространение" эффекта метода clear на $ V на другой массив $ A?
Были проведены тесты на PS ver.5.1.