2012-08-01 9 views
39

क्या भेड़ का बच्चा अभिव्यक्ति या कुछ भी समान समर्थन करता है?क्या गो लैम्ब्डा अभिव्यक्ति या कुछ भी समान है?

मैं लैम्बडा एक्सप्रेशन (रूबी) का उपयोग करने वाली दूसरी भाषा से लाइब्रेरी पोर्ट करना चाहता हूं।

उत्तर

38

Here is an example, नकल की और ध्यान से चिपकाया:

package main 

import fmt "fmt" 

type Stringy func() string 

func foo() string{ 
    return "Stringy function" 
} 

func takesAFunction(foo Stringy){ 
    fmt.Printf("takesAFunction: %v\n", foo()) 
} 

func returnsAFunction()Stringy{ 
    return func()string{ 
    fmt.Printf("Inner stringy function\n"); 
    return "bar" // have to return a string to be stringy 
    } 
} 

func main(){ 
    takesAFunction(foo); 
    var f Stringy = returnsAFunction(); 
    f(); 
    var baz Stringy = func()string{ 
    return "anonymous stringy\n" 
    }; 
    fmt.Printf(baz()); 
} 
+5

आपने ऐसा क्यों कहा? कॉपी और चिपकाया सावधानी से? :) – loyalflow

+0

क्योंकि मैंने कोड कॉपी किया है, और इसे स्पष्ट करना चाहता था :) – perreal

+10

कॉपी कोड की तुलना में मुझे आपके प्रश्न पर और अधिक देखना अच्छा लगेगा। सबसे पहले और सबसे महत्वपूर्ण, आप "हां"/"नहीं"/"आंशिक रूप से" आदि जोड़ सकते हैं। फिर विवरण का थोड़ा सा, आपका कोड वास्तव में क्या करता है। – Kissaki

1

हाँ

कंप्यूटर प्रोग्रामिंग में, एक

भाषा कल्पना देखें अज्ञात फ़ंक्शन या लैम्ब्डा एब्स्ट्रक्शन (func टियन शाब्दिक) एक फ़ंक्शन परिभाषा है जो पहचानकर्ता से बंधी नहीं है, और गो अज्ञात कार्यों का समर्थन करता है, जो बंद कर सकते हैं। बेनामी फ़ंक्शन उपयोगी होते हैं जब आप इसे नाम देने के बिना फ़ंक्शन इनलाइन को परिभाषित करना चाहते हैं।

package main 
    import "fmt" 

    func intSeq() func() int { 
     i := 0 
     return func() int { 
      i += 1 
      return i 
     } 
    } 


    func main() { 
     nextInt := intSeq() 
     fmt.Println(nextInt()) 
     fmt.Println(nextInt()) 
     fmt.Println(nextInt()) 
     newInts := intSeq() 
     fmt.Println(newInts()) 
    } 

फ़ंक्शन intSeq एक और फ़ंक्शन देता है, जिसे हम intSeq के शरीर में गुमनाम रूप से परिभाषित करते हैं। लौटाए गए फ़ंक्शन वेरिएबल पर बंद हो जाता है I बंद करने के लिए।

Output 
$ go run closures.go 
1 
2 
3 
1 
संबंधित मुद्दे