我在当前编写的程序中经常使用当前的代码模式:
let test_titles = ["a_fault"; "b_fault"; "c_fault"]
let tests: (unit -> 'component option) list = [a_fault; b_fault; c_fault]
let test_registry = List.zip test_titles tests
let apply_test (title, test) = test () |> Option.map (fun s -> (title, s))
let result: (string * 'component) option = test_registry |> List.tryPick apply_test
拥有一个测试注册表,用于识别有故障的组件和与函数名称同名的错误类型。
是否有更好的方法来创建此 test_registry,最好不需要我手动编写测试名称(动态获取函数名称)?
一般来说,这是惯用的 F# 吗?
编辑:代码最后一行有错误。结果是使用 test_registry
而不是 tests
计算的。
最佳答案
这看起来不错,但要考虑的另一个选择是让测试知道自己的名字。现在你有(我推断)
type Test<'comp> = unit -> 'comp option
你也可以这样
type Test<'comp> = unit -> string * 'comp option
其中字符串是名称。
我不太了解您的“大局”,无法提供其他建议或知道这是否有意义。
只是把它扔在那里,如果测试是某个模块 M
的一部分,您可以巧妙地使用 (?)
运算符,以便例如M?foo
可以访问测试函数及其名称。
关于f# - 在 F# 中创建并使用函数注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3172993/