多维数组的初始化似乎对空格很敏感

3
我注意到这两个声明之间的差异在于逗号的位置不同:
$a = @( @('a','b'),
        @('c','d'))

$b = @( @('a','b')
      , @('c','d'))

在这种情况下,$a.length 的值为2,$b.length 的值为3。 $b 的第一个子数组已被展平。
这是一个功能吗?在哪里可以找到相关的文档?
顺便说一下,$PSVersionTable:
Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.42000
BuildVersion                   6.3.9600.16406
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2
1个回答

2
 , Comma operator
         As a binary operator, the comma creates an array. As a unary
         operator, the comma creates an array with one member. Place the
         comma before the member.

来源。

这是因为@('a','b')会将两个字符串ab推入数组$b,而你使用逗号强制@('c','d')作为一个数组被推入$b

示例:

$b = @( @('a','b')
      , @('c','d'))

$b | foreach { Write-Host "Item: $_"}

输出:

Item: a
Item: b
Item: c d

如果你看一下这些类型:

$b | foreach { $_.GetType()}

您将获得:

IsPublic IsSerial Name     BaseType     
-------- -------- ----     --------     
True     True     String   System.Object
True     True     String   System.Object
True     True     Object[] System.Array 

要强制让$b包含两个数组,请使用逗号二进制运算符:

$b = @(@('a','b'),@('c','d'))

жҠұжӯүпјҢжҲ‘дёҚжҳҺзҷҪдҪ зҡ„еӣһзӯ”гҖӮ$b = @(@('a','b'),@('c','d')) еҢ…еҗ«дёӨдёӘжІЎжңүйҖ—еҸ·зҡ„ж•°з»„гҖӮеҰӮжһңеңЁйҖ—еҸ·д№ӢеүҚе’Ңд№ӢеҗҺжҸ’е…ҘжҚўиЎҢз¬Ұдјҡжңүд»Җд№ҲеҢәеҲ«пјҹ - Benoit
你是对的。这是因为在这种情况下,“逗号”被用作二元运算符,详见我的编辑。 - Martin Brandl
这是否意味着二进制运算符不能跟随换行符? - Benoit
是的,它可以。如果您在第一行末尾添加反引号`,则逗号将被视为二进制运算符,您可以验证这一点。 - Martin Brandl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接