为什么有可能遍历空数组

rory.ap

给定以下PowerShell代码:

$FolderItems = Get-ChildItem -Path "C:\Test"

Write-Host "FolderItems Is Null: $($FolderItems -eq $null)"

foreach ($FolderItem in $FolderItems)
{
    Write-Host "Inside the loop: $($FolderItem.Name)"
}

Write-Host "Done."

当我使用文件C:\Test夹中的一个文件测试它时,它输出以下内容:

FolderItems Is Null: False
Inside the loop: MyFile.txt
Done.

但是,当我使用文件夹中的ZERO文件对其进行测试时,它将输出以下内容:

FolderItems Is Null: True
Inside the loop: 
Done."

如果$FolderItems为null,那么为什么要进入foreach循环?

杰森·希克(Jason Shirk)

这是在V1中做出的有意设计选择,并在V3中进行了重新设计。

在大多数语言中,foreach语句只能循环事物的集合。PowerShell一直与众不同,在V1中,除了值的集合外,您还可以循环使用一个值。

例如:

foreach ($i in 42) { $i }  # prints 42

在V1中,如果值是一个集合,则foreach将遍历集合中的每个元素,否则它将仅针对该值进入循环。

注意,在上面的句子中,$ null并不特殊。这只是另一个价值。从语言设计的角度来看,这是相当干净和简洁的解释。

不幸的是,许多人没有想到这种行为,并且导致了许多错误。我认为这会引起一些混淆,因为人们期望foreach语句的行为几乎类似于foreach-object cmdlet。换句话说,我认为人们期望以下内容能够相同地工作:

$null | foreach { $_ }
foreach ($i in $null) { $i }

在V3中,我们认为更改行为足够重要,因为我们可以帮助脚本编写者避免在脚本中引入错误。

请注意,从理论上讲,更改行为可能会以意想不到的方式破坏现有脚本。我们最终决定,大多数可能在foreach语句中看到$ null的脚本已经使用if来保护foreach语句,例如:

if ($null -ne $c)
{
    foreach ($i in $c) { ... }
}

因此,实际上,大多数现实世界脚本不会看到行为的变化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么可能通过空数组循环

来自分类Dev

遍历可能存在空数组的嵌套JSON

来自分类Dev

为什么数组为空

来自分类Dev

我为什么不能遍历此数组?

来自分类Dev

我为什么不能遍历此数组?

来自分类Dev

为什么我的空数组不为空?

来自分类Dev

为什么此for循环未遍历数组中的所有列表

来自分类Dev

为什么过滤具有多个条件的对象数组会返回一个空数组?

来自分类Dev

为什么不打印空的numpy数组

来自分类Dev

List.ToArray() - 为什么数组是空的?

来自分类Dev

为什么“datas”数组总是空的?

来自分类Dev

为什么$-引用可能对Perl数组?

来自分类Dev

为什么我的person_ids哈希中有一个空数组元素?

来自分类Dev

为什么带有空依赖项数组的useCallback不返回相同的函数?

来自分类Dev

为什么空数组的类型在结构的内部和外部具有不同的大小?

来自分类Dev

如何遍历具有空项目的structs数组?

来自分类Dev

如何遍历具有空项目的structs数组?

来自分类Dev

为什么它们在AngularJS中遍历数组?

来自分类Dev

为什么使用数组索引循环遍历比指针访问慢?

来自分类Dev

为什么通过遍历数组比Seq.find快

来自分类Dev

为什么循环遍历ArrayList <String>与常规数组相同?

来自分类Dev

为什么我的程序无法循环遍历数组

来自分类Dev

为什么在遍历数组时会得到奇怪的整数

来自分类Dev

为什么 Reduce 在遍历传入的整个数组之前就关闭了?

来自分类Dev

空数组和空数组有什么区别?

来自分类Dev

PHP遍历数组的所有可能路线

来自分类Dev

如何遍历简单数组中的所有可能组合

来自分类Dev

为什么空数组的维数不能为空?

来自分类Dev

为什么我的循环没有遍历所有值?

Related 相关文章

热门标签

归档