2014-07-19 16 views
7

Tôi muốn chuyển kết quả từ hàm fn() trả về nhiều giá trị vào hàm wantx() chấp nhận nhiều giá trị. Điều này dường như hoạt động nếu số giá trị được chấp nhận bởi hàm wantx() khớp với số giá trị trả về. Ví dụ, fn() trả về 2 giá trị, và want2() chấp nhận 2 giá trị:lỗi - nhiều giá trị fn() trong bối cảnh giá trị đơn

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

Tuy nhiên, nếu tôi muốn các giá trị trở lại của fn() để đóng vai trò như các đối số 2 và 3 của want3(), sau đó Tôi gặp lỗi:

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

Làm thế nào muốn2() ngữ cảnh nhiều giá trị trong khi muốn3() thì không?

Làm cách nào để gọi hàm muốn3() hoạt động?

Dưới đây là toàn bộ chương trình:

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!") 
    } 
} 

Trả lời

9

Xem 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 lưu trữ các giá trị trả lại 'a, b: = fn (5); muốn3 (1, a, b); 'là cần thiết cho việc đánh giá kiểu ngầm trong a, b. – ABri

Các vấn đề liên quan