如何将数组传递给匿名函数?

2023-12-01

我目前在 Powershell 中使用匿名函数,我注意到在从系统值类型 to 系统对象.

举个例子:

$f = {
    param($InputArray)
    Write-Host "`$Arr Type During Call:" ($InputArray.GetType().FullName)
    Write-Host "`$Arr Contents During Call:" $InputArray
}

[object[]]$Arr = [object[]]@($true, $false)

Write-Host "`$Arr Type Before Call:" ($Arr.GetType().FullName)
Write-Host "`$Arr Contents Before Call:" $Arr "`n"

$f.Invoke($Arr)

以下示例将输出以下内容:

$Arr 调用前类型:System.Object[]
$Arr 调用前的内容: True False

调用期间的 $Arr 类型:System.Boolean
通话期间的 $Arr 内容:True

看起来 Powershell 转换了我的变量$Arr进入类型System.Boolean。如果我强制参数的类型object[],引入一个新问题:

$f = {
    param([object[]]$InputArray)
    Write-Host "`$Arr Type During Call:" ($InputArray.GetType().FullName)
    Write-Host "`$Arr Contents During Call:" $InputArray
}

[object[]]$Arr = [object[]]@($true, $false)

Write-Host "`$Arr Type Before Call:" ($Arr.GetType().FullName)
Write-Host "`$Arr Contents Before Call:" $Arr "`n"

$f.Invoke($Arr)

新的更改产生以下输出:

$Arr 调用前类型:System.Object[]
$Arr 调用前的内容: True False

调用期间的 $Arr 类型:System.Object[]
通话期间的 $Arr 内容:True

Powershell 仅提供匿名函数我的数组的一个元素。这里发生了什么?

  1. 为什么 Powershell 会强制转换为boolean当我明确地给它一个object array?
  2. 即使我强制匿名函数的输入参数类型,为什么Powershell不提供整个数组?

Use:

$f.Invoke((, $Arr))

或者,更通俗地讲,PowerShell:

& $f $Arr

As for 你尝试过什么:

$f.Invoke($Arr)

传递数组的元素$Arr as 个别论点。 由于您的脚本块$f仅定义one参数,仅first的元素$Arr绑定到该参数,$InputArray.

(, ($Arr))通过将数组包装在一个辅助的单元素数组,其中$f.Invoke()然后打开并因此通过$Arr as a single争论。

也就是说,使用对象methods在 PowerShell 中通常是一种尴尬的体验,因为调用语法会导致与 PowerShell 的混淆command syntax.

通常,可以停留在 PowerShell 命令和操作符的范围内。

具体来说,t调用脚本块的 PowerShell 惯用方式({ ... })是使用&, 呼叫操作员(执行脚本块child scope; 或者., 点源运算符,(通常)执行直接在调用者的范围内).

& (and .) use command句法 (argument解析模式),其中参数在没有括号的情况下传递并用空白而不是, - see 这个答案了解更多信息。

所以,& $f $Arr解释$Arr作为第一个也是唯一一个要传递的参数作为一个整体到脚本块。

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

如何将数组传递给匿名函数? 的相关文章

随机推荐

  • 日历月份错误

    我尝试用日历设置几年后的简单日期 字符串日期是此方法的参数 SimpleDateFormat format new SimpleDateFormat dd mm yyyy String DateTimeParts date split St
  • 使用discord.py更改角色层次结构

    我想在discord py 中创建一个新角色 但我希望这个角色位于 比方说 角色中的第三位 我怎样才能实现这个目标 你会使用Role edit 通过一个position值 该值必须低于您的最高角色的职位 bot command async
  • patsy 的倒数

    Patsy 的幂不允许负整数 所以 如果我们有一些系列数据X patsy dmatrices X X 1 X 返回错误 我如何将 X 的倒数添加到这样的帕西公式中 运算符的特殊含义在嵌入式函数调用中被关闭 所以如果你写X 1 x然后帕西将其
  • 使用Boost预处理器解析元素序列

    我定义了一个宏 define TYPES height int 10 width int 20 如何使用 Boost Preprocessor 来扩展这个宏 int height 10 int width 20 我最多能得到的是高度 整数
  • JavaScript 计算公式不起作用

    我有以下 JavaScript 函数来使用文本框进行一些计算 但是当我在文本框上调用此函数时 它不起作用 这是我的JS代码 Update
  • 如何在 SQL Server 中动态使用数据库名称

    我需要获取 SQL Server 中的所有表名 为此 我使用以下代码 select TABLE NAME from INFORMATION SCHEMA TABLES 我需要使用动态数据库名称 为此 我尝试使用以下代码 Declare db
  • 如何使用CSV Config Set的共享模式在Jmeter中运行线程?

    有没有办法在 CSV 数据集配置中使用 共享模式 的 编辑 选项 我在官方网站上找到了说明吗 apache jmeter 组件 CSV 数据集配置 标识符 共享相同标识符的所有线程共享相同的标识符 文件 例如 如果您有 4 个线程组 您可以
  • 在启用 crsf 和安全组件的 cakephp 3.4 中通过 ajax 发送表单

    需要帮忙 我希望能够通过 ajax 将表单发送到控制器进行处理 同时在应用程序控制器 cakephp 3 4 中启用 crsf 和安全组件 将不胜感激我能得到的任何帮助 谢谢 为了发送 ajax 请求 您需要首先通过文档中指定的 head
  • 如何将 gzipped rdf 文件加载到 rdf4j 存储库?

    我想将 gzipped rdf 文件加载到org eclipse rdf4j repository Repository 上传期间 必须将状态消息记录到控制台 我的 rdf 文件的未压缩数据大小约为 1GB 压缩数据大小约为 50MB 实际
  • 如何判断 Intent.createChooser 选择了哪个应用程序?

    Code Intent launchIntent new Intent Intent ACTION MAIN launchIntent addCategory Intent CATEGORY HOME Intent chooser Inte
  • 如何克隆继承的对象?

    我有一个Tile使用此方法的类 public object Clone return MemberwiseClone 还有另一个班级Checker继承自Tile 我也有一个Board类是一个List
  • java中如何检测文件系统已更改

    我想知道如何在java中有效地实现文件系统更改 假设我在文件夹中有一个文件并修改该文件 我希望尽快得到 java 的有关此更改的通知 如果可能的话 不要频繁轮询 因为我想我可以打电话java io file lastModified每隔几秒
  • 管道缓冲区大小是 4k 还是 64k?

    我在多个地方读到管道的默认缓冲区大小是 4kB 例如 here 和我的ulimit a倾向于证实这一说法 ulimit a core file size blocks c 0 data seg size kbytes d unlimited
  • 通过powershell安装docker时出错

    在 Windows Server 2016 上安装 docker 时出现此错误 有什么想法吗 PS C Users Administrator gt Install Package Name docker ProviderName Dock
  • Boost C++ - 寻找精神符号表

    在 Boost Spirit 中如果我有符号表 struct Foo boost spirit qi symbols
  • 在 vsts 中下载构建工件无法获取特定构建定义的最新构建

    我正在使用 VSTS 中的下载工件插件来使用当前构建定义获取不同构建定义的特定工件 我无法将工件下载到本地代理 我安装了私人代理 下面抛出错误 12 01 2018 下午 01 30 Shwetha Rattihalli 2018 01 1
  • '?' aria-label='DML 中是否有 C++ 的等效项:'template '?'> DML 中是否有 C++ 的等效项:'template '?

    对于这个模板 是否可以参数化uint32类型 template test t saved uint32 data 我尝试使用param mytype uint32 但没有成功 是否可以采用其他方式 DML 没有对泛型的内置支持 但是您can
  • 如何禁用 IntelliJ IDEA 中模块的某些检查?

    在 IntelliJ IDEA 中 我可以禁用对类 方法或其他单元的某些检查 我的项目中有一个模块 它是一个库 我不是唯一的使用者 我没有使用库中的所有方法 因此大量方法被标记为 未使用 这些都是误报 我想单独禁用此模块的这些检查 理想情况
  • 遗传算法中的适应度函数设计

    我需要求解联立线性方程 具有 7 个未知数的 5 个方程 即欠定问题 其中变量在很大范围内变化 0 1 00 000 有人可以建议我应该使用什么健身功能吗 我猜你指的是一个由 5 个线性方程组和 7 个变量组成的系统 这张纸似乎显示了您正在
  • 如何将数组传递给匿名函数?

    我目前在 Powershell 中使用匿名函数 我注意到在从系统值类型 to 系统对象 举个例子 f param InputArray Write Host Arr Type During Call InputArray GetType F