2012-10-14 8 views
5

मैं एफ # सीख रहा हूं और पाइथन के साथ कुछ अनुभव है। मुझे वास्तव में पाइथन फ़ंक्शन सजावट पसंद है; मैं बस सोच रहा था कि क्या हमारे पास एफ # में ऐसा कुछ है?क्या एफ # प्रोग्रामिंग भाषा में पाइथन फ़ंक्शन सजावट के समान कुछ है?

+2

भी देखें इस प्रकार है [डेकोरेटर पैटर्न के कार्यात्मक बराबर?] (http://stackoverflow.com/questions/7064389/functional -equivalent के- डेकोरेटर पैटर्न)। – nneonneo

उत्तर

9

एफ # में फ़ंक्शन सजावट के लिए कोई वाक्य रचनात्मक चीनी नहीं है।

प्रकारों के लिए, आप printf सामग्री को अनुकूलित करने के लिए StructuredFormatDisplay विशेषता का उपयोग कर सकते हैं। यहाँ 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] 

कार्यों के लिए, आप आसानी से समारोह रचना का उपयोग कर व्यक्त कर सकते हैं Python's decorators। उदाहरण के लिए, 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" 

एफ # में अनुवाद किया जा सकता है के रूप में

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

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

let hello = 
    let hello = fun() -> "hello world" 
    (makebold << makeitalic) hello 
संबंधित मुद्दे