может кто-нибудь объяснить, почему первый пример дает другие результаты, чем следующие 2

$b = (2,3)

$myarray1 = @(,$b,$b)

$myarray1[0].length #this will be 1
$myarray1[1].length

$myarray2 = @(
,$b
,$b
)

$myarray2[0].length #this will be 2
$myarray[1].length

$myarray3 = @(,$b
,$b
)

$myarray3[0].length #this will be 2
$myarray3[1].length

ОБНОВЛЕНИЕ

Я думаю, что на #powershell IRC мы с этим справились. Вот еще один пример, демонстрирующий опасность разрыва запятой в следующей строке, а не в верхней строке при перечислении нескольких элементов. в массиве из нескольких строк.

$b = (1..20)

$a = @( $b, $b ,$b,
        $b, $b ,$b)

for($i=0;$i -lt $a.length;$i++)
{
  $a[$i].length
}        
"--------"
$a = @( $b, $b ,$b
       ,$b, $b ,$b)

for($i=0;$i -lt $a.length;$i++)
{
  $a[$i].length
}        

производит

20
20
20
20
20
20
--------
20
20
20
1
20
20

На самом деле, скорее, использование вложенных массивов, которые могут усложнить это здесь, представляет собой простой массив целых чисел

$c = @( 1 , 2 , 
        3 , 4 )
for($i=0;$i -lt $c.length;$i++)
{
  $c[$i].gettype()
}        
"---------"
$c = @( 1 , 2 
       , 3 , 4 )
for($i=0;$i -lt $c.length;$i++)
{
  $c[$i].gettype()
}        

и результаты

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

. Мне любопытно, как люди объяснят это . Думаю, теперь я понимаю это, но мне трудно объяснить это кратко и понятно, хотя приведенный выше пример в некоторой степени способствует достижению этой цели.

6
задан klumsy 13 March 2011 в 08:16
поделиться