簡體   English   中英

go error - 單值上下文中的多值 fn()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM