2014-07-19 11 views
7

मैं फ़ंक्शन fn() से कई मानों को वापस करने के लिए एक फ़ंक्शन चाहता हूं() जो एकाधिक मान स्वीकार करता है। ऐसा लगता है कि wantx() द्वारा स्वीकार किए गए मानों की संख्या वापसी मानों की संख्या से मेल खाती है। अगर मैं fn की वापसी मान चाहते हैं() तर्क 2 और want3 के 3() के रूप में कार्य करने के लिए, तोत्रुटि - एकल-मान संदर्भ में एकाधिक-मान fn()

r:= want2(fn(5)) // seems to work fine 

हालांकि, उदाहरण के लिए, fn() 2 मूल्यों, और want2() स्वीकार करता है 2 मान देता है मुझे एक त्रुटि मिलती है:

r:= want3(1, fn(5)) // error: multiple-value fn() in single-value context 

वांछित 2() एक बहु-मान संदर्भ कैसे चाहता है जबकि 3() नहीं है?

मैं काम करने के लिए 3() काम करने के लिए कॉल कैसे प्राप्त करूं?

package sandbox 

import "testing" 

func want3(fac int, i int, ok bool) int { 
    if ok { 
     return i * fac * 2 
    } 
    return i * fac * 3 
} 

func want2(i int, ok bool) int { 
    if ok { 
     return i * 2 
    } 
    return i * 3 
} 

func fn(i int) (int, bool) { 
    return i, true 
} 

func TestCall(t *testing.T) { 
    // error: multiple-value fn() in single-value context 
    // r := want3(1, fn(5)) 

    r := want2(fn(5)) // works fine 

    if r != 10 { 
     t.Errorf("Call!") 
    } 
} 

उत्तर

9

देखें here:

As a special case, if the return parameters of a function or method g are equal in number and individually assignable to the parameters of another function or method f, then the call f(g(parameters_of_g)) will invoke f after binding the return values of g to the parameters of f in order.

No other special cases for function calls are allowed.

+0

वापसी मान 'ए, बी भंडारण afaiu:

यहाँ पूरा कार्यक्रम है = fn (5); want3 (1, ए, बी); 'बी में अंतर्निहित प्रकार के मूल्यांकन के लिए आवश्यक है, बी। – ABri

संबंधित मुद्दे