假设我有一个漂亮的F#函数,如下所示:
let doWork (item: string) =
printf "Hello %s" item
,现在我要从中创建一个Azure函数。我需要做的就是声明另一个类似的函数,但是用特定的属性来装饰它,例如:
[<FunctionName("DoWork")>]
let DoWork([<QueueTrigger("myqueue")>] item: string) = doWork item
第20次这样做之后,我问自己是否可以在构建时使用属性生成那些函数。像
let functionApp = generateFunctionsMagic [doWork; doWork2; doWork3]
将扩展为3种带注释的方法。我可以用其他方式注释生成的内容。
什么是有效的方法?
答案 0 :(得分:1)
在F#中没有简单的代码生成方法
您可以基于Fantomas使自己拥有代码生成器。
常用工作流程:
LongIdent
个节点)您可以为自己的代码生成工具派遣Fantomas。
P.S。此外,这可能会有所帮助-Ionide Analyzers。但是afaik他们不支持AST重写。 AST仅用于分析问题,之后您必须直接使用文本。
我已经基于AST创建了example的代码源