golang - Ir a desempaquetar matriz como argumentos
interface en golang (3)
Entonces en Python y Ruby está el operador splat (*) para desempaquetar una matriz como argumentos. En Javascript existe la función .apply (). ¿Hay alguna manera de desempaquetar una matriz / división como argumentos de función en Ir? ¡Cualquier recurso para esto sería genial también!
Algo parecido a esto:
func my_func(a, b int) (int) {
return a + b
}
func main() {
arr := []int{2,4}
sum := my_func(arr)
}
Me disculpo si estoy cometiendo errores sintácticos / variados. Soy nuevo en Ir.
No, no hay soporte directo para esto en el lenguaje. Python y Ruby, así como Javascript que estás mencionando; son todos los lenguajes dinámicos / de scripting. Go se acerca mucho más, por ejemplo, a C que a cualquier lenguaje dinámico. La funcionalidad ''aplicar'' es útil para lenguajes dinámicos, pero de poco uso para lenguajes estáticos como C o Go,
O bien su función es varargs, en la que puede usar un sector con la ...
anotación que muestra Hunter McMillen, o su función tiene un número fijo de argumentos y puede descomprimirlos al escribir su código.
Si realmente quiere hacer esto de forma dinámica en una función de número fijo de argumentos, puede usar reflection:
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)
}
Puede usar una sintaxis vararg similar a C:
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)
}
Ahora puedes sumar todas las cosas que quieras. Observe lo importante ...
después cuando llama a la función my_func
.
Ejemplo de ejecución: http://ideone.com/8htWfx