gpt4 book ai didi

powershell - 我怎样才能一劳永逸地摆脱困境?

转载 作者:行者123 更新时间:2023-12-02 23:25:55 24 4
gpt4 key购买 nike

我有这个文件:

function t {
"abcd" -split "" |%{ if ($_ -eq "b") { return; } write-host $_; }
}
$o = @{}
$o |add-member -name t -membertype scriptmethod -value {
"abcd" -split "" |%{ if ($_ -eq "b") { return; } write-host $_; }
}

write-host '-function-'
t;
write-host '-method-'
$o.t();

如果我运行它,我会得到:
-function-
a
c
d
-method-
a
c
d

正如预期的那样。但如果我想要的是 'a',我可以替换 returnbreak .如果我在函数中这样做,我得到的是:
-function-
a

所以该方法甚至永远不会被调用。如果我在方法中替换它,它将无法编译(并提示调用它)。这里发生了什么?

一劳永逸地退出 foreach-object 循环的正确方法是什么?

最佳答案

最简单的解决方案是将其重写为 foreach 语句,而不是使用特别难以停止的 ForEach-Object 命令:

$o | add-member -name t -membertype scriptmethod -value {
foreach($e in "abcd" -split "") {
if ($_ -eq "b") { break }
write-host $_;
}
}

作为旁注, foreach(){}关键字/构造的运行速度比通过 ForEach-Object 的管道快得多。 .

为了完整起见...

要停止管道,请抛出 PipelineStoppedException
"abcd" -split "" | % {
if($_ -eq "b") {
throw [System.Management.Automation.PipelineStoppedException]::new()
}
$_
}

关于powershell - 我怎样才能一劳永逸地摆脱困境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37039754/

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