2016-11-02 9 views
1

Wie entferne ich doppelte Stringwerte, wenn ich einen TypeProvider nutze?Wie entferne ich doppelte Zeichenfolgenwerte, wenn ich einen TypeProvider verwende?

Ich habe die folgende Logik:

type MovieProvider = JsonProvider<"https://facebook.github.io/react-native/movies.json"> 

let getMovies() = 

    async { 
     let! result = MovieProvider.AsyncLoad "https://facebook.github.io/react-native/movies.json" 
     return result.Movies 
      |> Array.toList 
      |> List.map (fun m -> { Title=m.Title; Year=m.ReleaseYear }) 
    } 

Ich möchte die Vervielfältigung der hartkodierte URL entfernen, indem Sie folgendermaßen vorgehen:

let url = "https://facebook.github.io/react-native/movies.json" 

type MovieProvider = JsonProvider<url> 

let getMovies() = 

    async { 
     let! result = MovieProvider.AsyncLoad url 
     return result.Movies 
      |> Array.toList 
      |> List.map (fun m -> { Title=m.Title; Year=m.ReleaseYear }) 
    } 

Allerdings erhalte ich folgende Fehler:

type MovieProvider = JsonProvider<url> 

Error This is not a valid constant expression or custom attribute value

Zusammenfassung

Also, was die Praxis in F # empfohlen ist Duplizierung von fest codierten Werte für die Verwaltung?

In C#, würde ich nur eine konstante erklären.

+1

Für diesen speziellen Zweck verwenden 'MovieProvider.GetSample()'. Das ist, was es ist da. –

Antwort

6

Um einen Wert wörtlichen als Kompilierung-Konstante in F #, verwenden Sie das [<Literal>] Attribut zu deklarieren.

[<Literal>] 
let url = "https://facebook.github.io/react-native/movies.json" 

oder äquivalent

let [<Literal>] url = "https://facebook.github.io/react-native/movies.json" 
Verwandte Themen