2016-07-28 15 views
5

Próbowałem przy użyciu kolekcji yaml map w moim pliku konfiguracyjnym:F # yaml typ dostawcy

Companies: 
    - code: 11 
    name: A 
    country: FR 
    functionalCurrency: EUR 
    - code: 12 
    name: B 
    country: GB 
    functionalCurrency: GBP 

Jednak gdy próbuje odczytać go z dostawcą typu, znajdzie tylko pierwszy wynik z listy.

Z:

open FSharp.Configuration 
    type CompaniesConfig = YamlConfig<"Config.yaml"> 
    let config = CompaniesConfig() 

wyjścia jest:

val config : CompaniesConfig = 
    Companies: 
    - code: 11 
     name: A 
     country: FR 
     functionalCurrency: EUR 

Próbując analizować kod Internecie pracował, dlatego zastanawiam się, czy jest to ograniczenie biblioteka czy ...?

Dzięki za pomoc

Odpowiedz

3

Trzeba rzeczywiście załadować plik, nie tylko dostać schemat jeśli chcesz pracować z nim bezpośrednio: config.Load(yamlFile). Powinno to być bardziej wyraźne w dokumentacji. Użyłem przykładowego pliku w linku.

#if INTERACTIVE 
#r @"..\packages\FSharp.Configuration.0.6.1\lib\net40\FSharp.Configuration.dll" 
#endif 

open FSharp.Configuration 
open System.IO 

/// https://github.com/fsprojects/FSharp.Configuration/blob/master/tests/FSharp.Configuration.Tests/Lists.yaml 

[<Literal>] 
let yamlFile = __SOURCE_DIRECTORY__ + "..\Lists.yaml" 

File.Exists yamlFile 

type TestConfig = YamlConfig<yamlFile> 
let config = TestConfig() 

config.Load(yamlFile) 
config.items.Count 
config.items 

I dostać oba elementy:

> 
val it : int = 2 
> 
val it : System.Collections.Generic.IList<TestConfig.items_Item_Type> = 
    seq 
    [FSharp.Configuration.TestConfig+items_Item_Type 
     {descrip = "Water Bucket (Filled)"; 
     part_no = "A4786"; 
     price = 147; 
     quantity = 4;}; 
    FSharp.Configuration.TestConfig+items_Item_Type 
     {descrip = "High Heeled "Ruby" Slippers"; 
     part_no = "E1628"; 
     price = 10027; 
     quantity = 1;}] 
>