F # Интерактивная ошибка? - PullRequest
0 голосов
/ 30 декабря 2010

Я попробовал следующий код в VS2010:

open System.Security.Cryptography

let rsaTest1 =
    let ecKey = [|0uy..143uy|] // junk data for testing

    let ecKeyMod = ecKey.[8..8+128-1]   
    let ecKeyExp = ecKey.[136..136+8-1]
    let rsa = RSAParameters(Modulus = ecKeyMod, Exponent = ecKeyExp)

    rsa


let rsaTest2 =
    let ecKey = [|0uy..143uy|] // junk data for testing

    let rsa = RSAParameters(Modulus = ecKey.[8..8+128-1], Exponent = ecKey.[136..136+8-1])

    rsa

Если я выделю весь код и отправлю его в F # Interactive (Alt + Enter), то rsaTest1 работает, но rsaTest2 выдает сообщение об ошибке,

System.NullReferenceException: Object reference not set to an instance of an object.
   at <StartupCode$FSI_0004>.$FSI_0004.main@() in P:\proj\Tachograph\Project\CompuTachTest\CompuTachTest\rsaTest.fsx:line 16

Однако, если я изменю rsaTest2 со значения на функцию и вызову ее,

let rsaTest2 () =
    let ecKey = [|0uy..143uy|] // junk data for testing
    let rsa = RSAParameters(Modulus = ecKey.[8..8+128-1], Exponent = ecKey.[136..136+8-1])
    rsa

let x = rsaTest2 ()

тогда ошибки нет. Ошибка F # или моя ошибка?

1 Ответ

5 голосов
/ 30 декабря 2010

Это, скорее всего, ошибка - если вы скомпилируете опубликованный фрагмент с помощью fsc и запустите его, вы получите это для x64:

Unhandled Exception: System.InvalidProgramException: Common Language Runtime detected an invalid program.
at <StartupCode$test>.$Test.main@()

и для x86:

Unhandled Exception: System.InvalidProgramException: JIT Compiler encountered an internal limitation.
at <StartupCode$test>.$Test.main@()

Вы должны сообщить об этом через Microsoft Connect.

...