为什么powershell会收集未捕获的值并将其作为数组返回

2024-05-05

尽管我认为以下代码应该返回单个值,但它返回一个数组。

function Do-Something {
    123
    return 456
}

(Do-Something).GetType() # will say Object[]

我了解到,如果我想避免这种情况,我必须将不需要的值通过管道传递给 Out-Null,如下所示

function Do-Something {
    123 | Out-Null
    return 456
}

但是,我找不到 PowerShell 以这种方式实现的任何理由。我发现,如果您忘记某些东西具有您未捕获的返回值,这可能会导致令人讨厌且无声的错误。有人可以解释一下这什么时候可以派上用场吗?另外是否可以强制 powershell 不收集数组中所有未捕获的变量?


PowerShell 将脚本或函数中所有语句的输出发送到输出管道,因为它是一个 shell,这就是 shell 的工作方式。这return语句有点遗憾,因为函数不返回对象,而是将对象写入管道。能够终止函数的执行是必要的,但我们可能应该将其称为其他名称。简单地发出对象的能力使简单的脚本变得更简单,因为不需要显式的输出语句或返回。它有时会引起问题吗 - 是的,有时会引起问题。因此,对于 V5 中引入的类,我们采用了更传统的编程语言语义。如果类中的方法要返回某些内容,那么它must声明一个返回类型并且它must使用return语句返回一个值,否则什么也不会返回。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么powershell会收集未捕获的值并将其作为数组返回 的相关文章

随机推荐