我试图在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
Run Code Online (Sandbox Code Playgroud)
输出是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
Run Code Online (Sandbox Code Playgroud)
注意使用. function在与定义`$ aaaa相同的范围内调用函数.
| 归档时间: |
|
| 查看次数: |
3169 次 |
| 最近记录: |