- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
& {
$action = & { $y = 100
return { write-host "Value: $y" }.getnewclosure()
}
[void] (register-engineevent -sourcei "foo" -action $action)
[void] (new-event -sourcei "foo")
}
上面的代码打印 Value:
,而我希望它打印 Value: 100
。这里缺少什么吗?
最佳答案
引擎正在调用GetNewClosure()
对它来说,这样做总比不做更好。
当我运行上面的代码时,我只得到 Value:
的输出,但后来我全局声明 $y = 25
并跑了[void](new-event -sourcei 'foo')
再次,输出是 Value: 25
。然后我又改变了它的值,$y = 38
,并再次运行该事件:Value: 38
.
如果你想要的是烘焙 $y
的值在创建操作时,一种方法是以 $y
的值创建脚本 block 。成为文字或文字的一部分:
$action = &{ $y = 100
return (invoke-expression "{write-host 'Value: $y'}")
}
这首先解析字符串以插入值,因此 Invoke-Expression
最终做了相当于这样的事情:
{write-host 'Value: 100'}
除了将脚本 block 的全部内容组成字符串并将其传递给 Invoke-Expression
之外,我不确定是否还有其他方法可以烘焙该值。 .
针对您的评论,对关闭的进一步解释:
> $action100 = &{$y = 100; return {write-host "Value: $y"}.GetNewClosure()}
> &$action100
Value: 100
这就是您期望的结果,这就是您得到的结果,因为脚本 block 仍然在 $y
的值周围“闭合”在 GetNewClosure()
的范围内被叫了。
> $y = 25
> &$action100
Value: 100
仍然在 $y
附近关闭即100
.
> $action25 = $action100.GetNewClosure()
> &$action25
Value: 25
这会生成一个新的脚本 block ,其中包含当前作用域中的变量。它使它重新评估什么$y
位于该脚本 block 中,在这种情况下, $y
现在 25 岁。
> $y = 38
> &$action100
Value: 100
> &$action25
Value: 25
> &($action100.GetNewClosure())
Value: 38
此时,因为$y
现在,当您调用New-Event
时,已在全局范围内声明它将使用 GetNewClosure()
并重新评估$y
至38
,并打印Value: 38
。您已经得到 Value:
因为在引擎事件调用 GetNewClosure()
的上下文中变量$y
没有定义,所以"Value: $y"
变成"Value: "
.
关于powershell - 如何将 .GetNewClosure() 与 EngineEvent 的 -Action 值一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6905305/
& { $action = & { $y = 100 return { write-host "Value: $y" }.getnewclosure() } [
我是一名优秀的程序员,十分优秀!