Bir tür veya başka birini döndüren bir işlev çalışıyorum. F # olmadan bu kodlamak için yeni bir ayrımcı sendika türü oluşturmak ve bu ayrımcılık birliği işlevden döndürmek için herhangi bir yolu var mı?F #: Tek bir işlevden farklı türlerdeki değerlerin döndürülmesi
type Json = JNumber of float
| JString of string
| JArray of seq<Json>
| JObject of Map<string, Json>
| JBool of bool
| JNull
let parseJson(jason:Json) = match jason with
|JNumber num -> num
|JString str -> str
|JArray arr -> arr |> Seq.map (fun e -> parseJson e)
|JObject obj -> obj |> Seq.map (fun (k,v) -> (k, parseJson v)) |> Map.ofArray
|JBool boo -> boo
|JNull -> None
Esasen ben F # veriyapılarıdır içine Json nesnesi çevirmek isterler: Burada
derlemek olmaz basit bir örnektir. (Bazı arka plan için, metin dönüştüren bir oyuncak json ayrıştırıcısı yazıyorum -> Json nesnesi -> F # veri yapıları ayrı adımlarda)
ve gerçekten mümkün değil. Basit sebep varsayalım, x 'parseJson' 'x' türünün ne olduğunu' - 'x + 1' satırını derlemeli mi? etc –
@JohnPalmer Bu ne tür bir sağlayıcı için değil mi? Benim düşüncem soru doğru değil, ama cevap bir "tip sağlayıcı" oluşturmak ... Gnicholas için: https://msdn.microsoft.com/en-us/library/hh361034.aspx ya da kontrol edin: http://fsharp.github.io/FSharp.Data/library/JsonProvider.html ve muhtemelen bunun için kaynak https://github.com/fsharp/FSharp.Data/tree/master/src/Json –
@HelgeReneUrholm Bir tür sağlayıcının aslında karmaşık bir tür döndürdüğünü unutmayın. Aslında bir şablon dosyasına ihtiyaç duyar, böylece derleme zamanında türleri üretebilir. Çalışma zamanında yeni bir dosya kullanırsanız, şablon ile aynı biçime sahip olması gerekir. –