在F#编程语言中有没有类似于Python函数装饰器的东西?

akr*_*hit 5 python f# decorator

我正在学习F#并且有一些Python经验.我真的很喜欢Python函数装饰器; 我只是想知道我们在F#中是否有类似的东西?

pad*_*pad 10

F#中的函数装饰器没有语法糖.

对于类型,您可以使用StructuredFormatDisplay属性来自定义printf内容.以下是F#3.0 Sample Pack的示例:

[<StructuredFormatDisplayAttribute("MyType is {Contents}")>]
type C(elems: int list) =
   member x.Contents = elems

let printfnSample() = 
    printfn "%A" (C [1..4])

// MyType is [1; 2; 3; 4]
Run Code Online (Sandbox Code Playgroud)

对于函数,您可以使用函数组合轻松表达Python的装饰器.例如,这个Python示例

def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped

def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped

@makebold
@makeitalic
def hello():
    return "hello world"
Run Code Online (Sandbox Code Playgroud)

可以如下翻译成F#

let makebold fn = 
    fun () -> "<b>" + fn() + "</b>"

let makeitalic fn =
    fun () -> "<i>" + fn() + "</i>"

let hello =
    let hello = fun () -> "hello world"
    (makebold << makeitalic) hello
Run Code Online (Sandbox Code Playgroud)