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

Sco*_*rod 1 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 }) 
    }
Run Code Online (Sandbox Code Playgroud)

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

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 }) 
    }
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

type MovieProvider = JsonProvider<url>
Run Code Online (Sandbox Code Playgroud)

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

摘要

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

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

pia*_*ste 6

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

[<Literal>]
let url = "https://facebook.github.io/react-native/movies.json"
Run Code Online (Sandbox Code Playgroud)

或者等价的

let [<Literal>] url = "https://facebook.github.io/react-native/movies.json"
Run Code Online (Sandbox Code Playgroud)