F # Грамотная передача аргументов в файл скрипта - PullRequest
0 голосов
/ 04 февраля 2019

Я использую 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")

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

1 Ответ

0 голосов
/ 04 февраля 2019

Вы можете запустить произвольный код 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 ***)

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

...