在 Python 中,可以編寫這樣的代碼,從列表中分配多個值:(a, b, c, d) = [1,2,3,4]是否有一組類似的用于切片的 Go 庫函數(shù)?也就是說,我可以這樣做:http : //play.golang.org/p/DY1Bi5omm1package mainfunc get3(s []interface{}) ( a interface{}, b interface{}, c interface{}, rest []interface{}) { return s[0],s[1],s[2],s[4:]}func main() { s := make([]interface{},5); for i :=0 ; i < 5; i++ { s[i] = i} a,b,c,_ := get3(s) print(a.(int)) print(b.(int)) print(c.(int))}有沒有標(biāo)準(zhǔn)的 gophery 方法來做到這一點?有沒有辦法解決界面丑陋的問題?{}
2 回答

GCT1015
TA貢獻(xiàn)1827條經(jīng)驗 獲得超4個贊
我認(rèn)為你不能,至少不能以慣用/干凈的方式。您可以進(jìn)行多項分配,但您必須直接或使用閉包傳遞單個值:
package main
import (
"fmt"
)
func valuesFromList(list[]int,startFrom int) func() int {
i:=startFrom
return func() int {
ret := list[i]
i++
return ret
}
}
func main () {
list := []int{0,1,2,3,4,5,6,7,8,9}
yield := valuesFromList(list,5)
//This works
a,b,c := yield(),yield(),yield()
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
//This also works
d,e,f := list[0],list[1],list[2]
fmt.Println(d)
fmt.Println(e)
fmt.Println(f)
//This won't work
//g,h,i:= list[7:9]
}
- 2 回答
- 0 關(guān)注
- 227 瀏覽
添加回答
舉報
0/150
提交
取消