2012-10-23 19 views
11

क्या गोलांग का उपयोग कर सी # में फंक्शन अधिभार या वैकल्पिक पैरामीटर जैसे काम करना संभव है? या शायद एक वैकल्पिक तरीका?गो में फ़ंक्शन ओवरलोडिंग के लिए वैकल्पिक?

+0

आप आप क्या चाहते हैं की एक ठोस उदाहरण है (यह भी ग # में) दे सकते हैं करने के लिए? –

+1

'सार्वजनिक शून्य कंप्रेसर (स्ट्रिंग dstFilePath, स्ट्रिंग srcFilePath, स्ट्रिंग फ़ाइल नाम) '' सार्वजनिक शून्य कंप्रेसर (स्ट्रिंग srcFilePath, स्ट्रिंग फ़ाइल नाम) ' – Coder

+1

संभावित डुप्लिकेट: http://stackoverflow.com/questions/2032149/optional-parameters – nemo

उत्तर

8

न तो फ़ंक्शन ओवरलोडिंग और न ही वैकल्पिक तर्क सीधे समर्थित हैं। आप अपने स्वयं के तर्क संरचना का निर्माण कर सकते हैं। मैं इस तरह मतलब (अपरीक्षित, काम नहीं कर सकता ...) संपादित करें: now tested...

package main 

    import "fmt" 

    func main() { 
     args:=NewMyArgs("a","b") // filename is by default "c" 
     args.SetFileName("k") 

     ret := Compresser(args) 
     fmt.Println(ret) 
    } 

    func Compresser(args *MyArgs) string { 
     return args.dstFilePath + args.srcFilePath + args.fileName 
    } 

    // a struct with your arguments 
    type MyArgs struct 
    { 
     dstFilePath, srcFilePath, fileName string 
    } 

    // a "constructor" func that gives default values to args 
    func NewMyArgs(dstFilePath string, srcFilePath string) *MyArgs { 
     return &MyArgs{ 
       dstFilePath: dstFilePath, 
       srcFilePath:srcFilePath, 
       fileName :"c"} 
    } 

    func (a *MyArgs) SetFileName(value string){ 
     a.fileName=value; 
    } 
+0

गो में वैकल्पिक तर्क अब अनुमति है। इसे देखें http://changelog.ca/log/2015/01/30/golang –

+0

@ मोहितबुरा आपका लिंक पढ़ने योग्य है लेकिन यह नहीं कहता कि वैकल्पिक तर्क अब अनुमति है। वास्तव में यह खाली इंटरफेस और विविध तर्कों –

9

जाओ में वैकल्पिक पैरामीटर को मुहावरेदार जवाब आवरण कार्यों है:

func do(a, b, c int) { 
    // ... 
} 

func doSimply(a, b) { 
    do(a, b, 42) 
} 

समारोह से अधिक भार जानबूझकर बाहर छोड़ दिया गया था, क्योंकि यह पढ़ने के लिए कोड हार्ड (एर) बनाता है।

+2

* के आधार पर उनकी अनुपस्थिति के आसपास काम करने का एक अलग तरीका सुझाता है क्योंकि यह कोड को पढ़ने के लिए कठिन (एर) बनाता है। * यह पूरी तरह से व्यक्तिपरक है। मैं ऐसा नहीं सोचता, हमेशा नहीं। –

2

वहाँ कुछ संकेत here variadic तर्कों का उपयोग उदाहरण के लिए, कर रहे हैं:

sm1 := Sum(1, 2, 3, 4) // = 1 + 2 + 3 + 4 = 10 
sm2 := Sum(1, 2) // = 1 + 2 = 3 
sm3 := Sum(7, 1, -2, 0, 18) // = 7 + 1 + -2 + 0 + 18 = 24 
sm4 := Sum() // = 0 

func Sum(numbers ...int) int {  
    n := 0  
    for _,number := range numbers { 
     n += number 
    }  
    return n 
} 

या ...interface{} किसी भी प्रकार के लिए:

Ul("apple", 7.2, "BANANA", 5, "cHeRy") 

func Ul(things ...interface{}) { 
    fmt.Println("<ul>")  
    for _,it := range things { 
    fmt.Printf(" <li>%v</li>\n", it) 
    }  
    fmt.Println("</ul>") 
} 
संबंधित मुद्दे