我正在尝试在 Powershell 中实现类似 BDD 框架的 RSpec/Jasmine(或者至少研究制作一个的潜在问题)。
目前,我在实现简单的之前/之后功能时遇到问题。给定
$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