140

そのため、Python と Ruby には、配列を引数としてアンパックするためのスプラット演算子 (*) があります。Javascript には .apply() 関数があります。Goで関数の引数として配列/スライスをアンパックする方法はありますか? このためのリソースも素晴らしいでしょう!

これに沿った何か:

func my_func(a, b int) (int) {
    return a + b
}

func main() {
    arr := []int{2,4}
    sum := my_func(arr)
}

構文/さまざまな間違いを犯している場合は、お詫び申し上げます。私は行くのが初めてです。

4

4 に答える 4

208

C に似た vararg 構文を使用できます。

package main
import "fmt"

func my_func( args ...int) int {
   sum := 0
   for _,v := range args {
      sum = sum + v
   }

   return sum;
}

func main() {
    arr := []int{2,4}
    sum := my_func(arr...)
    fmt.Println("Sum is ", sum)
}

これで、好きなだけ合計することができます。...関数を呼び出すときの重要な after に注意してくださいmy_func

実行例: http://ideone.com/8htWfx

于 2013-07-09T19:01:46.693 に答える
12

関数は varargs であり、...Hunter McMillen が示すように表記法でスライスを使用できます。または、関数に固定数の引数があり、コードを記述するときにそれらをアンパックできます。

固定数の引数の関数でこれを動的に実行したい場合は、リフレクションを使用できます。

package main
import "fmt"
import "reflect"

func my_func(a, b int) (int) {
    return a + b
}

func main() {
    arr := []int{2,4}
    var args []reflect.Value
    for _, x := range arr {
        args = append(args, reflect.ValueOf(x))
    }
    fun := reflect.ValueOf(my_func)
    result := fun.Call(args)
    sum := result[0].Interface().(int)
    fmt.Println("Sum is ", sum)
}
于 2013-07-10T02:35:28.580 に答える
-23

いいえ、言語ではこれを直接サポートしていません。あなたが言及しているPythonとRuby、そしてJavascript。すべて動的/スクリプト言語です。たとえば、Go はどの動的言語よりも C に近い言語です。「適用」機能は動的言語では便利ですが、C や Go などの静的言語ではほとんど役に立ちません。

于 2013-07-09T19:02:42.543 に答える