我想在Powershell中创建一个(不可变的)元组元组(或数组),所以我的尝试如下:
$t = @("A","B")
现在,这会创建一个我可以添加到的数组:
$t += "C"
我希望$t
在程序执行期间不可变。我怎么能这样做?
答案 0 :(得分:5)
你实际上可以使用元组
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
答案 1 :(得分:3)
您可以创建Read-Only
或Constant
个变量:Read-Only
变量 可以使用-Force
开关使用Set-Variable
方法进行修改)
New-Variable -Name foo -Option Constant -Value @("A", "B")
$foo += "C"
Cannot overwrite variable foo because it is read-only or constant.
答案 2 :(得分:2)
根据我的理解,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
不是我的代码。它来自这篇非常好的文章Functional Programming in PowerShell
你应该可以将它扩展到你想要的任何类型的对象。