2012-10-14 21 views
5

Tôi đang học F # và có một số kinh nghiệm với Python. Tôi thực sự thích trang trí hàm Python; Tôi chỉ tự hỏi nếu chúng ta có bất cứ điều gì tương tự như nó trong F #?Có điều gì tương tự với trình trang trí hàm Python trong ngôn ngữ lập trình F # không?

+2

Xem thêm [chức năng tương đương với Decorator Pattern?] (Http://stackoverflow.com/questions/7064389/functional tương đương-of-decorator-pattern). – nneonneo

Trả lời

9

Không có đường cú pháp cho trang trí hàm trong F #.

Đối với các loại, bạn có thể sử dụng thuộc tính StructuredFormatDisplay để tùy chỉnh nội dung printf. Dưới đây là một ví dụ từ 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] 

Đối với chức năng, bạn có thể dễ dàng bày tỏ Python's decorators sử dụng hàm hợp. Ví dụ, this Python example

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" 

có thể được dịch sang F # như sau

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

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

let hello = 
    let hello = fun() -> "hello world" 
    (makebold << makeitalic) hello 
Các vấn đề liên quan