在利用TypeProvider时如何删除重复的字符串值?

时间:2016-11-02 13:47:12

标签: f#

如何在利用TypeProvider时删除重复的字符串值?

我有以下逻辑:

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 }) 
    }

我想通过执行以下操作来删除硬编码网址的重复:

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 }) 
    }

但是,我收到以下错误:

type MovieProvider = JsonProvider<url>
  

错误这不是有效的常量表达式或自定义属性   值

摘要

那么F#中用于管理硬编码值复制的建议做法是什么?

在C#中,我只是声明一个常量。

1 个答案:

答案 0 :(得分:6)

要在F#中将值文字声明为编译时常量,请使用[<Literal>]属性。

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

或等效

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