2016-08-21 4 views
0

Я хочу, чтобы сохранить состояние в возвращаемом закрытии:Сложные объекты в затворах

function HashMaker { 

     $enc = [System.Text.Encoding]::UTF8 
     $hasher = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider 

     return { 
      param($value) 
      [System.BitConverter].ToString($hasher.ComputeHash($enc.GetBytes($value))) 
     }.GetNewClosure() 
} 

Там явно что-то не так с этим подходом

+0

Что именно неправильно? Какое поведение вы получаете? И как он отличается от того, что вы ожидаете? – PetSerAl

+0

На самом деле трудно угадать намерения. Вышеприведенный код возвращает блок сценария, но не очень полезен, поскольку ни один хэш-файл $, а $ enc не будет существовать после его возврата. –

+1

@ChrisDent Они, безусловно, будут (любезно предоставлены 'GetNewClosure()') –

ответ

3

Не называйте ToString() на [BitConverter]типа самих, называют его статический методToString():

return { 
     param($value) 
     [System.BitConverter]::ToString($hasher.ComputeHash($enc.GetBytes($value))) 
    }.GetNewClosure() 

Обратите внимание, что :: вместо .

Смежные вопросы