Мне нужно преобразовать строку в литерал, чтобы я мог передать ее в качестве аргумента CsvProvider. Но я не могу этого сделать. Код ниже работает без проблем:
open System.IO
open FSharp.Data
open FSharp.Data.JsonExtensions
let charSwitch (a: char) b x =
if x = a then
b
else
x
let jsonDataPath = Path.Combine(__SOURCE_DIRECTORY__, @"data\fractal.json")
let jsonData = JsonValue.Load(jsonDataPath)
/// Path with traded assets
let trp = ((jsonData?paths?tradedAssets).AsString() |> Core.String.map (charSwitch '\\' '/')).ToString()
printfn "trp is a standard string: %s" trp
// trp is a standard string: H:/Dropbox/Excel/Data/Fractal/Traded.csv
Однако при добавлении следующих двух строк
[<Literal>]
let tradedPath = trp
в конце я получаю сообщение This is not a valid constant expression or custom attribute value
.
Я даже пытался сделать копию trp, но это не помогло.
Любой способ обойти эту проблему?
type TickerName = CsvProvider<"C:/temp/myfile.csv">
работает нормально, но 'let fil = C:/temp/myfile.csv` вместе сtype TickerName = CsvProvider<fil>' does not work. Placing
[‹Literal›]` в строке чуть выше 'let fil = C:/temp/myfile.csv` решает проблему. . Но я не могу сделать это со строкой, показанной в моем вопросе, предположительно потому, что она была рассчитана. В SO есть пара вопросов о необходимости поставщиков типов для буквальных аргументов Sample. - person Soldalma   schedule 02.03.2017Load
для вашего типаTickerName
для загрузки ресурса из другого источника, который следует той же схеме, что и ваш локальный ресурс""C:/temp/myfile.csv"
. - person TheInnerLight   schedule 02.03.2017TickerName
, потому что мне нужно, чтобыtraderPath
был литералом вtype TickerName = CsvProvider<tradedPath>
. Не удалось создать типTickerName
, я не могу вызвать его метод Load. Я мог бы создать типTickerName
, жестко закодировав имя файла следующим образом:type TickerName = CsvProvider<"C:/temp/myfile.csv">
, но я не хочу этого делать, потому что я хочу, чтобы файл Sample определялся во время выполнения. - person Soldalma   schedule 02.03.2017type TickerName = CsvProvider<"C:/temp/myfile.csv">
, а затемTickerName.Load(trp)
? - person TheInnerLight   schedule 03.03.2017