gpt4 book ai didi

PowerShell-在特定范围内执行脚本 block

转载 作者:行者123 更新时间:2023-12-04 04:06:48 26 4
gpt4 key购买 nike

我正在尝试在Powershell中实现RSpec/Jasmine之类的BDD框架(或至少研究制造它的潜在问题)。

目前,我在实现简单的之前/之后功能方面遇到问题。给定

$ErrorActionPreference = "Stop"

function describe()
{
$aaaa = 0;
before { $aaaa = 2; };
after { $aaaa; }
}

function before( [scriptblock]$sb )
{
& $sb
}

function after( $sb )
{
& $sb
}

describe

输出为0,但我希望它为2。在Powershell中有什么方法可以实现它(除了使$ aaaa成为全局对象,在脚本块中遍历父作用域,直到找到$ aaaa,使$ aaaa成为“对象”和其他肮脏的黑客:))

我理想的情况是希望在其他范围内调用脚本块,但是我完全不知道是否有可能。我在 https://connect.microsoft.com/PowerShell/feedback/details/560504/scriptblock-gets-incorrect-parent-scope-in-module上找到了一个有趣的示例(请参阅解决方法),但不确定其工作方式以及是否以任何方式对我有帮助。

TIA

最佳答案

调用运算符(&)始终使用新范围。而是使用点源(.)运算符:

$ErrorActionPreference = "Stop"

function describe()
{
$aaaa = 0;
. before { $aaaa = 2; };
. after { $aaaa; }
}

function before( [scriptblock]$sb )
{
. $sb
}

function after( $sb )
{
. $sb
}

describe

注意,在定义$ aaaa的相同作用域内,使用 . function调用该函数。

关于PowerShell-在特定范围内执行脚本 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11707590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com