Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez az üzenet akkor jelenik meg, ha egy típusteszt-minta egy értéknek felel meg, de a leadás nem bizonyítható biztonságosan fordításkor, mert a típusértéket nem a fordító határozta meg. Ez gyakran akkor fordul elő, ha egyezést egyező függvényparaméteren, amelynek a típusa kikövetkeztetett. Az alábbi kód erre mutat be egy példát:
let unboxAndPrint x =
match x with
| :? string as s -> printfn "%s" s
| _ -> printfn "not a string"
Ez a kód a következő kimenetet eredményezi:
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.
Ebben a kódban a függvényparaméterre x nem volt kikövetkeztetett típus. Ennek számos oka lehet, a nem használt paramétertől kezdve a típuskövető algoritmustól kezdve a kód máshol nem hívott függvényéig. Mivel a típus x nem lett kikövetkeztetve, a fordító nem tudja garantálni, hogy a típus x sztringként is szerepelhessen. Mivel a fordító nem tudja garantálni, hogy ez a leadás futásidőben is elvégezhető, ez az üzenet jelenik meg.
Az üzenet kijavításához további információt kell adnia a fordítónak arról, hogy milyen típusú értékhez használja a típustesztelési mintát.
A fenti kód kijavításának egyik módja, ha egy típust közvetlenül alkalmaz a x paraméterre:
let unboxAndPrint (x: obj) =
match x with
| :? string as s -> printfn "%s" s
| _ -> printfn "not a string"
Ebben a kódban a x paraméter egy típust objkap, és mivel obj típustesztelhető annak megtekintéséhez, hogy az alapul szolgáló ábrázolás létezik-e string, a függvény most már lefordítható.
A hibás kód kijavításának másik módja a paraméter stringkonvertálásának másik módja:x
let unboxAndPrint x =
printfn "%s" (string x)
Ebben a kódban a string függvény paraméteren x való használata elegendő információt adott a fordítónak ahhoz, hogy az as stringtípusára x következtetjen, így a hiba a függvény újrabontásával oldható meg.