Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit bericht wordt weergegeven wanneer een typetestpatroon wordt gebruikt om een waarde te vinden, maar de cast kan niet veilig worden bewezen tijdens het compileren omdat de typewaarde niet is bepaald door de compiler. Dit gebeurt vaak wanneer overeenkomen met een functieparameter waarvan het type is afgeleid. De volgende code illustreert een voorbeeld hiervan:
let unboxAndPrint x =
match x with
| :? string as s -> printfn "%s" s
| _ -> printfn "not a string"
Deze code resulteert in de volgende uitvoer:
This runtime coercion or type test from type
'a
to
string
involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed.
In deze code heeft de functieparameter x geen type afgeleid. Dit kan om een aantal redenen zijn, variƫrend van de parameter die niet wordt gebruikt op manieren die het algoritme voor typedeductie informatie geven, tot de functie die nergens anders in de code wordt aangeroepen. Omdat het type x niet is afgeleid, kan de compiler niet garanderen dat het type x kan worden gecast als een tekenreeks. Omdat de compiler niet kan garanderen dat deze cast tijdens runtime kan worden uitgevoerd, wordt dit bericht weergegeven.
Als u dit bericht wilt oplossen, moet u de compiler meer informatie geven over het type waarde waarvoor u het type-testpatroon gebruikt.
Een manier om de bovenstaande code te herstellen, is om rechtstreeks een type toe te passen op de x parameter:
let unboxAndPrint (x: obj) =
match x with
| :? string as s -> printfn "%s" s
| _ -> printfn "not a string"
In deze code krijgt de x parameter een type objen omdat obj de parameter kan worden getest om te zien of de onderliggende weergave is string, wordt de functie nu gecompileerd.
Een andere manier om de foutieve code te herstellen, is door een andere manier te gebruiken om de x parameter te converteren naar een string:
let unboxAndPrint x =
printfn "%s" (string x)
In deze code heeft het gebruik van de string functie op de x parameter de compiler voldoende informatie gegeven om het type als xstringaf te stellen, zodat de fout wordt opgelost door de functie te herstructureren.