[英]go error - multiple-value fn() in single-value context
我想將返回多個值的函數 fn() 的結果傳遞給接受多個值的函數 wantx() 。 如果 wantx() 接受的值數量與返回值的數量匹配,這似乎有效。 例如, fn() 返回 2 個值,而 want2() 接受 2 個值:
r:= want2( fn(5) ) // seems to work fine
但是,如果我希望 fn() 的返回值充當 want3() 的參數 2 和 3,則會出現錯誤:
r:= want3( 1, fn(5) ) // error: multiple-value fn() in single-value context
want2() 如何成為多值上下文,而 want3() 不是?
我如何獲得對 want3() 的調用?
這是完整的程序:
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!")
}
}
見這里:
作為一種特殊情況,如果函數或方法 g 的返回參數數量相等並且可以單獨分配給另一個函數或方法 f 的參數,那么調用 f(g(parameters_of_g)) 將在綁定返回值后調用 f g 到 f 的參數的順序。
不允許函數調用的其他特殊情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.