¿Go admite expresiones lambda o algo similar?Does Go tiene expresiones lambda o algo similar?
Quiero portar una biblioteca de otro idioma que use expresiones lambda (Ruby).
¿Go admite expresiones lambda o algo similar?Does Go tiene expresiones lambda o algo similar?
Quiero portar una biblioteca de otro idioma que use expresiones lambda (Ruby).
Here is an example, copiado y pegado con cuidado:
package main
import fmt "fmt"
type Stringy func() string
func foo() string{
return "Stringy function"
}
func takesAFunction(foo Stringy){
fmt.Printf("takesAFunction: %v\n", foo())
}
func returnsAFunction()Stringy{
return func()string{
fmt.Printf("Inner stringy function\n");
return "bar" // have to return a string to be stringy
}
}
func main(){
takesAFunction(foo);
var f Stringy = returnsAFunction();
f();
var baz Stringy = func()string{
return "anonymous stringy\n"
};
fmt.Printf(baz());
}
expresiones lambda también se denominan literales de función. Go los admite por completo.
Ver la especificación de lenguaje: http://golang.org/ref/spec#Function_literals
Ver un código de paseo, con ejemplos y una descripción: http://golang.org/doc/codewalk/functions/
Sí
En la programación de computadoras, un función anónima o abstracción lambda (func literal de literal) es una definición de función que no está vinculada a un identificador, y Go admite funciones anónimas, que pueden formar cierres. Las funciones anónimas son útiles cuando quiere definir una función en línea sin tener que nombrarla.
package main
import "fmt"
func intSeq() func() int {
i := 0
return func() int {
i += 1
return i
}
}
func main() {
nextInt := intSeq()
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
newInts := intSeq()
fmt.Println(newInts())
}
function intSeq devuelve otra función, que definimos anónimamente en el cuerpo de intSeq. La función devuelta se cierra sobre la variable i para formar un cierre.
Output
$ go run closures.go
1
2
3
1
¿por qué dijiste eso? copiado y pegado con cuidado? :) – loyalflow
porque copié el código, y quería dejarlo claro :) – perreal
Me encantaría ver más sobre su pregunta que el código copiado. En primer lugar, puede agregar un "sí"/"no"/"parcialmente", etc. Luego, un poco de descripción, lo que realmente hace su código. – Kissaki