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