我正在使用F#格式进行一些Literate编程。
我的用例是我需要运行数百个数据集,并且我想为每个数据集创建一些统计数据和图表的“报告”。它们都是相同的格式。
所以我想要的是只有一个带有F#代码和markdown的fsx脚本文件,可以在循环中对其进行解析以生成单独的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")
所以我可以遍历它并生成所有不同的报告。但是我在文档中找不到该怎么做。
答案 0 :(得分:4)
您可以在运行脚本之前使用fsiEval
对象运行任意F#代码,因此,执行此操作的一种方法是编写一些定义全局变量的代码,然后这些代码将从脚本中可见(不过,在编辑脚本时,您会在F#编辑器中收到错误消息。执行此操作的代码:
let fsiEval = FsiEvaluator()
let ifsi = fsiEval :> IFsiEvaluator
ifsi.Evaluate("let magic = 40", false, None)
我的测试文件现在将结果显示为42:
let res = 2 + magic
(*** include-value: res ***)
这适用于您可以合理地通过源代码传递的配置-我不确定是否存在将复杂对象传递给脚本的好方法。