2012-10-14 15 views

risposta

9

Non c'è zucchero sintattico per i decoratori di funzioni in F #.

Per i tipi, è possibile utilizzare l'attributo StructuredFormatDisplay per personalizzare il contenuto di stampa. Ecco un esempio da 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] 

Per le funzioni, si può facilmente esprimere Python's decorators utilizzando la funzione di composizione. Ad esempio, 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" 

può essere tradotto in F # come segue

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

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

let hello = 
    let hello = fun() -> "hello world" 
    (makebold << makeitalic) hello 
Problemi correlati