F # Грамотная передача аргументов в файл сценария

Я использую форматирование F # для выполнения грамотного программирования.

Мой вариант использования состоит в том, что у меня есть пара сотен наборов данных, которые мне нужно обработать, и для каждого я хочу создать «отчет» с некоторой статистикой и графиками. Все они одного формата.

Итак, я хочу иметь только один файл сценария fsx с кодом F # и уценкой, который можно анализировать в цикле для создания отдельных файлов html.

Мой текущий код выглядит так:

// Create FSI evaluator with transformation enabling charts to show.
let fsiEval = FsiEvaluator() 
fsiEval.RegisterTransformation(transformation)
let source = __SOURCE_DIRECTORY__
let template = Path.Combine(source, "zeros.html")
let script = Path.Combine(source, "zeros.fsx")
Literate.ProcessScriptFile(script, templateFile = template, fsiEvaluator = fsiEval, output = "rendered.html")

Это работает нормально, но мне нужно жестко запрограммировать набор данных, который я просматриваю, в файле "zeros.fsx". Я хотел бы передать в этот метод параметры:

Literate.ProcessScriptFile(script, templateFile = template, fsiEvaluator = fsiEval, output = "rendered.html")

так что я могу перебрать его и сгенерировать все свои различные отчеты. Но я не могу найти в документации, как это сделать.


person UmaN    schedule 04.02.2019    source источник


Ответы (1)


Вы можете запустить произвольный код F # с помощью объекта fsiEval перед запуском сценария, поэтому один из способов сделать это - написать код, определяющий глобальную переменную, которая затем будет видна из сценариев (хотя вы получите сообщение об ошибке в редакторе F # при редактировании скрипта ...). Код для этого:

let fsiEval = FsiEvaluator() 
let ifsi = fsiEval :> IFsiEvaluator
ifsi.Evaluate("let magic = 40", false, None)

И мой тестовый файл теперь показывает результат как 42:

let res = 2 + magic
(*** include-value: res ***)

Это работает для конфигурации, которую вы можете разумно передать через исходный код - я не уверен, есть ли хороший способ передать скрипту более сложные объекты.

person Tomas Petricek    schedule 04.02.2019
comment
Спасибо, Томас. Это отлично подойдет для моих целей. Если кому-то нужен сложный объект, я думаю, можно было бы просто использовать строку json и перейти оттуда. - person UmaN; 04.02.2019