2

Python では、次のようなコードを記述して、リストから複数の値を割り当てることができます。

(a, b, c, d) = [1,2,3,4]

スライス用の Go ライブラリ関数の同様のセットはありますか? つまり、私はこれを行うことができます: http://play.golang.org/p/DY1Bi5omm1

package main

func 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))
}

これを行うための標準的な gophery の方法はありますか?

また、インターフェースの醜さを回避する方法はありますか?{}

4

2 に答える 2

2

少なくとも慣用的/クリーンな方法では、できないと思います。複数の割り当てを行うことはできますが、個々の値を直接またはクロージャーで渡す必要があります。

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]
}
于 2013-09-30T21:58:16.837 に答える