F#识读脚本文件的传递参数

时间:2019-02-04 12:50:24

标签: f# f#-data literate-programming f#-scripting

我正在使用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")

所以我可以遍历它并生成所有不同的报告。但是我在文档中找不到该怎么做。

1 个答案:

答案 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 ***)

这适用于您可以合理地通过源代码传递的配置-我不确定是否存在将复杂对象传递给脚本的好方法。