Powershell 如何创建不可变数组?
我想在Powershell中创建元素的(不可变)元组(或数组),因此我的尝试如下:Powershell 如何创建不可变数组?,powershell,Powershell,我想在Powershell中创建元素的(不可变)元组(或数组),因此我的尝试如下: $t = @("A","B") 现在,这将创建一个我可以添加到的数组: $t += "C" 我希望$t在程序执行期间保持不变。如何执行此操作?您可以创建只读或常量变量:(只读变量可以使用-Force开关和设置变量方法进行修改) 据我所知,Powershell根本没有不变性的概念。你可以用自定义对象来伪装它。下面是一些可以用来伪造不可变哈希表的代码: function New-ImmutableObject($
$t = @("A","B")
现在,这将创建一个我可以添加到的数组:
$t += "C"
我希望
$t
在程序执行期间保持不变。如何执行此操作?您可以创建只读
或常量
变量:(只读
变量可以使用-Force
开关和设置变量
方法进行修改)
据我所知,Powershell根本没有不变性的概念。你可以用自定义对象来伪装它。下面是一些可以用来伪造不可变哈希表的代码:
function New-ImmutableObject($object) {
$immutable = New-Object PSObject
$object.Keys | %{
$value = $object[$_]
$closure = { $value }.GetNewClosure()
$immutable | Add-Member -name $_ -memberType ScriptProperty -value $closure
}
return $immutable
}
$immutable = New-ImmutableObject @{ Name = "test"}
$immutable.Name = "test1" # Throws error
不是我的代码。它来自这篇相当不错的文章
您应该能够将其扩展到您想要的任何类型的对象。您实际上可以使用元组
PS[1] (203) > $t = [tuple]::create(1,2,3)
PS[1] (204) > $t.item1
1
PS[1] (205) > $t.item1 = 4
'item1' is a ReadOnly property.
At line:1 char:1
+ $t.item1 = 4
+ ~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
@Snak3d0c,如果你能改变它;这不是一成不变的。看来我误读了我找到的解释。谢谢你澄清这一点。我删除了我的评论,这样我就不会把别人搞糊涂了。这不是一成不变的。这不会产生错误:$foo[0]=“C”您还需要将其中的每个值设置为常量,但这可能会起作用。如bruce的回答所示,使用实际元组可能更好。这类似于将应用于C#中的字段:变量本身是只读的,但不一定是它引用的对象。这很好。我很遗憾地看到,元组有点像二等公民,没有获得数组之类的内置属性和方法,但仍然很高兴知道。
PS[1] (203) > $t = [tuple]::create(1,2,3)
PS[1] (204) > $t.item1
1
PS[1] (205) > $t.item1 = 4
'item1' is a ReadOnly property.
At line:1 char:1
+ $t.item1 = 4
+ ~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException