Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go是否有lambda表达式或类似的表达式?_Go_Lambda - Fatal编程技术网

Go是否有lambda表达式或类似的表达式?

Go是否有lambda表达式或类似的表达式?,go,lambda,Go,Lambda,Go是否支持lambda表达式或类似的东西 我想从另一种使用lambda表达式(Ruby)的语言移植一个库。是 ,小心复制和粘贴: Lambda表达式也称为函数文字。Go完全支持他们 请参见语言规范: 请参见代码漫游,包括示例和说明: 是 在计算机编程中,匿名函数或lambda抽象(函数文字)是一种不绑定标识符的函数定义,Go支持匿名函数,可以形成闭包。当您希望内联定义函数而无需命名时,匿名函数非常有用 package main import "fmt" func

Go是否支持lambda表达式或类似的东西

我想从另一种使用lambda表达式(Ruby)的语言移植一个库。

,小心复制和粘贴:


Lambda表达式也称为函数文字。Go完全支持他们

请参见语言规范:

请参见代码漫游,包括示例和说明:

在计算机编程中,匿名函数或lambda抽象(函数文字)是一种不绑定标识符的函数定义,Go支持匿名函数,可以形成闭包。当您希望内联定义函数而无需命名时,匿名函数非常有用

    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())
    }
函数intSeq返回另一个函数,我们在intSeq的主体中匿名定义该函数。返回的函数关闭变量i,形成一个闭包

Output
$ go run closures.go
1
2
3
1

是的,因为它是一种全功能语言,但没有像通常的lambda符号那样的胖箭头(->)或瘦箭头(->),并且为了清晰和简单起见,使用了func关键字

golang似乎没有生成lambda表达式,但您可以使用一个文本匿名函数,我在研究比较JS中的等效函数时编写了一些示例,希望它能有所帮助

无参数返回字符串:
func()字符串{
返回“某些字符串值”
}
//Js类似:()=>“一些字符串值”
带字符串args和返回字符串
func(参数字符串)字符串{
返回“some String”+arg
}
//Js相似:(arg)=>“某些字符串值”+arg
没有参数也没有返回(void)
func(){
fmt.Println(“某些字符串值”)
} 
//Js类似:()=>{console.log(“一些字符串值”)}
带参数且无返回(void)
func(参数字符串){
fmt.Println(“某些字符串”+arg)
}
//Js:(arg)=>{console.log(“某些字符串值”+arg)}

我一直在寻找的一个尚未提供的示例是,通过匿名函数将值直接分配给变量,例如

test1, test2 := func() (string, string) {
    x := []string{"hello", "world"}
    return x[0], x[1]
}()

注意:您需要在函数末尾使用括号
()
,以执行它并返回值,否则仅返回函数并产生
赋值不匹配:2个变量但1个值
错误。

我希望看到更多有关您的问题的信息,而不是复制的代码。首先也是最重要的,你可以添加一个“是”/“否”/“部分”等。然后再添加一点描述,说明你的代码实际上做了什么。Kissaki基本上他是在向其他函数传递函数,并从函数返回函数,代码是自描述性的,名称很聪明,TakesFunction接收函数而不是返回字符串,returnsFunction返回一个函数而不是返回一个字符串…..所以..是的..完全支持lambda:D…..这里有一个很好的示例,它是一个lambda函数的示例,它接受一个参数,并在声明的同一表达式中调用。不幸的是,这个示例很混乱,因为它使用了相同的名称作为参数函数(foo)和另一个函数的参数(foo Stringy)。我本不应该被如此仔细地复制:)任何不做baz:=func()字符串{return“anonymous stringy\n”}很好的答案,只是缺少了auto run
()
Go支持匿名和更高阶函数的示例,所以它确实允许您“生成lambda表达式”。+例如,1.Go有,但不是像
x->x+1
这样的短函数文本。这是最好的答案。我补充说,“lambdas”通常会考虑短函数文字,如代码> x> x+1 ,但是GO不支持这种语法,所以必须编写完整的代码> FUNC(x int){返回x+1 } < />代码。
test1, test2 := func() (string, string) {
    x := []string{"hello", "world"}
    return x[0], x[1]
}()