F# Literate 将参数传递给脚本文件
F# Literate pass arguments to script file
我正在使用 F# 格式化来做一些 Literate 编程。
我的用例是我有几百个数据集需要 运行 通过,并且我想为每个数据集创建一个 "report" 的一些统计数据和图表。它们都是相同的格式。
所以我想要的是只有一个带有 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")
所以我可以遍历它并生成我所有不同的报告。但是我在文档中找不到如何做到这一点。
您可以 运行 使用 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 ***)
这适用于您可以通过源代码合理传递的配置 - 我不确定是否有将更复杂的对象传递给脚本的好方法。
我正在使用 F# 格式化来做一些 Literate 编程。
我的用例是我有几百个数据集需要 运行 通过,并且我想为每个数据集创建一个 "report" 的一些统计数据和图表。它们都是相同的格式。
所以我想要的是只有一个带有 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")
所以我可以遍历它并生成我所有不同的报告。但是我在文档中找不到如何做到这一点。
您可以 运行 使用 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 ***)
这适用于您可以通过源代码合理传递的配置 - 我不确定是否有将更复杂的对象传递给脚本的好方法。