Was genau ist ein PowerShell ScriptBlock?
Ein PowerShell ScriptBlock ist keinlexikalischer Verschluss da die Variablen, auf die in der deklarierenden Umgebung verwiesen wird, nicht geschlossen werden. Stattdessen scheint es den dynamischen Bereich und die freien Variablen zu nutzen, die zur Laufzeit in einem Lambda-Ausdruck gebunden sind.
function Get-Block {
$b = "PowerShell"
$value = {"Hello $b"}
return $value
}
$block = Get-Block
& $block
# Hello
# PowerShell is not written as it is not defined in the scope
# in which the block was executed.
function foo {
$value = 5
function bar {
return $value
}
return bar
}
foo
# 5
# 5 is written $value existed during the evaluation of the bar function
# it is my understanding that a function is a named scriptblock
# which is also registered to function:
Das Aufrufen von GetNewClosure () für einen ScriptBlock gibt einen neuen ScriptBlock zurück, der über den referenzierten Variablen geschlossen wird. Dies ist jedoch in Umfang und Fähigkeit sehr begrenzt.
Was ist eine ScriptBlock-Klassifikation?