2016-07-31 43 views
5

Teorik bir sorunum var - örneğin bir üye tabanlı başka bir üyeyi hesaplamak için başlatma sırasında bir karma tabloya nasıl başvurulur.PowerShell HashTable - başlatma sırasında kendini referanslandırma

Remove-Variable myHashTable -ErrorAction Ignore 
$myHashTable = 
@{ 
    One = 1 
    Two= 2 
    Three = ??? # following expressions do not work 
     # $This.One + $This.Two or 
     # $_.One + $_.Two 
     # $myHashTable.One + $myHashTable.Two 
     # ???? 
} 

$myHashTable.Three -eq 3 # make this $true 

Herhangi bir fikir nasıl yapılır? Aslında mümkün mü?

Düzenleme

:

$myHashTable = 
@{ 
    One = 1 
    Two= 2 
} 
$myHashTable.Three = $myHashTable.One + $myHashTable.Two 

cevap

5

Bu korkarım nesne başlatıcısı sözdizimi kullanılarak mümkün olmayacaktır: Bu benim çözüm oldu. Değişkenleri kullanmak mümkün olsa da, nesneyi oluşturmadan önce değerleri hesaplamanız gerekir.

+0

Bu yanıt şu ana kadar öne çıkıyor :-(. – Honzajscz

1

bu tavsiye edemez, fakat iki kere veya daha fazla başlatıcı yineleyebilirsiniz:

(0..1) | %{ 
    $a = @{ 
     One = 1 
     Two = $a.One + 1 
    } 
} 

(0..2) | %{ 
    $b = @{ 
     One = 1 
     Two = $b.One + 1 
     Three = $b.Two + 1 
    } 
} 

yineleme, bir sayıdan bağlı olmayan, yani bütün hesaplamalar İdempotent olduğundan emin olun.

+0

İlginç bir çözüm - biraz garip ama orijinal :-) – Honzajscz