2009-12-05 8 views
0

Est-il possible d'utiliser un opérateur à la place d'une fonction dans go? Par exemple, dans le code suivant, est-il possible de remplacer add par +?Utilisation d'un opérateur à la place d'une fonction

package main 

import "fmt" 

var cur, prev int = 1, 1 

func fib(f func(int, int) int) int { 
    return f(cur, prev) 
} 

func main() { 
    add := func(x int, y int) int { return x + y }; 
    fmt.Println(fib(add)) 
} 

S'il n'est pas possible d'utiliser des opérateurs en tant que fonctions, j'apprécierais un lien vers la documentation pour le clarifier.

+3

La plupart du temps, la documentation d'une langue indique ce qu'elle * peut * faire, pas ce qu'elle * ne peut pas *. Ainsi, normalement, demander un lien vers la documentation si une langue * ne peut pas * faire quelque chose n'a pas de sens. – Amber

Répondre

5

Les opérateurs ne sont pas des valeurs de première classe dans Go (ni la plupart des autres langages), donc non, vous ne pouvez pas les passer en arguments. Notez que même le Go documentation utilise un func(x,y int) int { return x+y } dans ses exemples.

Notez également que le grammar for operators n'autorise aucune option pour un opérateur sans s'exprimer sur une expression correspondante.