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

Pet*_*ter 5 powershell return

下面的代码虽然我认为应该返回一个值,但返回一个数组.

function Do-Something {
    123
    return 456
}

(Do-Something).GetType() # will say Object[]
Run Code Online (Sandbox Code Playgroud)

我了解到,如果我想避免这种情况,我必须像这样将不需要的值传递给Out-Null

function Do-Something {
    123 | Out-Null
    return 456
}
Run Code Online (Sandbox Code Playgroud)

但是,我找不到为什么PowerShell以这种方式实现的原因.我发现如果你忘记某些东西有一个你没有捕获的返回值,这会导致讨厌的和无声的错误.有人可以解释什么时候这可以派上用场吗?还有可能强制powershell不收集数组中所有未捕获的变量吗?

Bru*_*tte 5

PowerShell将脚本或函数中的所有语句的输出发送到输出管道,因为它是一个shell,这就是shell的工作方式.该return语句有点令人遗憾,因为函数不返回对象,它们将对象写入管道.能够终止函数的执行是必要的,但我们可能应该将其称为其他东西.简单地发出对象的能力使得简单的脚本更简单,因为不需要显式的输出语句或返回.它有时会导致问题 - 是的,有时它会造成问题.因此,对于V5中引入的类,我们采用了更传统的编程语言语义.如果在一个类中的方法是要返回的东西,它必须声明返回类型,它必须使用return的语句返回一个值,否则什么也不会退回.