2016-07-31 31 views
5

Mam teoretyczny problem - jak odwołać się do tabeli mieszania podczas jej inicjowania, na przykład, aby obliczyć członka opartego innych już wymienionych członków.PowerShell HashTable - samo odniesienie podczas inicjalizacji

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 

Jakieś pomysły, jak to zrobić? Czy to rzeczywiście możliwe?

Edit: To było moje rozwiązanie:

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

Odpowiedz

5

To nie będzie możliwe przy użyciu składni inicjator obiektu obawiam się. Chociaż możliwe jest użycie zmiennych, musisz obliczyć wartości przed utworzeniem obiektu.

+0

Ta odpowiedź była już przed nami :-(. – Honzajscz

1

nie mogę polecić to, ale można iteracyjne inicjator dwa lub więcej:

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

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

Sprawdź, czy wszystkie obliczenia są idempotent, to nie zależy od liczby iteracji.

+0

Ciekawe rozwiązanie - nieco dziwne, ale oryginalne :-) – Honzajscz