在F#的计算表达式中定义新的关键字

问题描述 投票:0回答:2

F# 3.0 beta 包含一个 query {} 计算表达式以及大量新关键字。

如何在计算构建器中定义自己的关键字?

f# monads computation-expression f#-3.0
2个回答
24
投票

在 F# 3.0 中,您可以使用 CustomOperationAttribute 来实现此目的。

新属性没有很好的记录,我找到的唯一例子是 @Tomas 的这个很棒的答案和这个有趣的博客文章


0
投票

F#计算表达式支持自定义关键字。这允许您在计算表达式中定义自定义命令。 Saturn - F# 中的 Web 框架广泛使用了这一点。

type FooBuilder() =
    member t.Yield _ = String.Empty

    [<CustomOperation("fooCommand")>]
    member _.myFooCommand(state, arg1:string, arg2:string) =
        // do something with arg1 and arg2
        0

    [<CustomOperation("fooRun")>]
    member _.myFooRunMethod(state, arg1: float) =
        // do something with arg1 
        0
            

let foo = FooBuilder()
let _ = foo {
        fooCommand "dotnet" "--help"
        fooRun 3.14
}

您可以通过调用线程化“状态”。请阅读 Isaac Abraham 关于此主题的文章了解更多信息 -- https://www.compositional-it.com/news-blog/custom-keywords-in-computation-expressions/

土星代码 -- https://github.com/SaturnFramework/Saturn

© www.soinside.com 2019 - 2024. All rights reserved.