【问题标题】:How to return multiple values without it being cast as an array?如何在不将其转换为数组的情况下返回多个值?
【发布时间】:2019-10-30 02:56:32
【问题描述】:

在 powershell 中,我有一个函数,我想返回多个值并将所述值用作第二个函数的位置参数。不幸的是,它将值组作为数组返回。我该如何避免这种情况?

另外,我可以在不引入新变量的情况下避免这种行为吗?我知道我可以将返回的数组传递给一个变量并将其作为参数传递给函数,但如果可能的话,我想避免这种情况。

演示我遇到的问题的代码如下:

function Return-Values{
    return "One", "Two", "Three"
}
function Print-Args{
    param($One,$Two,$Three)
    Write-Host "1" $One
    Write-Host "2" $Two
    Write-Host "3" $Three
}
Print-Args (Return-Values)

输出是:

1 One Two Three
2 
3 

我希望输出是:

1 One
2 Two
3 Three

【问题讨论】:

  • 请编辑问题,不要添加评论并解释你想要达到的目标。据我所知,大多数(如果不是全部)编程语言都会从函数返回单个值。返回多个值需要返回结构、数组或对象等技巧。指针和引用也有效。甚至像 Python 和 Swift 这样宣传返回多个值的语言实际上也只返回一个对象。语法糖可以很容易地访问其内容,因此它看起来像多个值。
  • @vonPryz 您能否澄清我是否没有充分解释我希望实现的目标,或者在我设定的限制范围内是否不可能?除了在介绍中的写法之外,我不完全确定如何陈述它:“我有一个函数,我想返回多个值并将所述值用作第二个函数的位置参数” .

标签: powershell return arguments


【解决方案1】:

您可以使用About Splatting。我无法按照您的意愿使该功能正常工作。以下示例使用多行代码完成了您希望的操作。也许其他人知道另一种方式。

function Return-Values{
     return "One", "Two", "Three"
}

[System.Array]$InputArray = Return-Values #Get the input values as an array

function Print-Args{
    param($One,$Two,$Three)
    Write-Host "1" $One
    Write-Host "2" $Two
    Write-Host "3" $Three
}

Print-Args @InputArray #Use splatting for the input parameters

【讨论】:

    猜你喜欢
    • 2018-06-17
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 2011-02-02
    相关资源
    最近更新 更多