Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.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
Function 围棋之旅中的函数调用,练习“切片”_Function_Go - Fatal编程技术网

Function 围棋之旅中的函数调用,练习“切片”

Function 围棋之旅中的函数调用,练习“切片”,function,go,Function,Go,我正在学围棋,我试过围棋。我对这个话题本身毫无疑问。我很难理解函数调用 这是我对此练习的解决方案: package main import "golang.org/x/tour/pic" func Pic(dx, dy int) [][]uint8 { pic := make([][]uint8, dy) for y := range pic { pic[y] = make([]uint8, dx) for x := range pic[y]

我正在学围棋,我试过围棋。我对这个话题本身毫无疑问。我很难理解函数调用

这是我对此练习的解决方案:

package main

import "golang.org/x/tour/pic"

func Pic(dx, dy int) [][]uint8 {
    pic := make([][]uint8, dy)
    for y := range pic {
        pic[y] = make([]uint8, dx)
        for x := range pic[y] {
            pic[y][x] = uint8(5 * (x + y))
        }
    }
    return pic
}

func main() {
    //pic.Show(Pic(40,30)) // doesn't work, but why?
    pic.Show(Pic) // works, but why? Where are the values for dx and dy set?
}
从第5行开始,有一个函数,名为Pic,它接收两个整数变量dx,dy。所以我认为,正确的函数调用可能是Pic40,30,其中40和30是dx和dy的值

但是为什么第17行会抛出错误呢?图40,30 为什么18号线可以工作?pic.ShowPic 当执行第18行时,dx和dy的值来自哪里? 我试着去查,这会让我重新找到你。在这里我可以看到,函数show是这样定义的:

func Show(f func(int, int) [][]uint8)
我理解为:

Show是一个需要一个参数的函数。此参数是一个需要两个参数(均为int类型)的函数,并且它必须返回类型为[][]uint8的值—无符号8位整数的切片。Show本身不会返回任何内容

所以,在这里,我再次读到,内部函数Show的参数需要两个参数。但是,当我试图提供这些参数时,为什么会出现错误呢?为什么在没有参数的情况下调用函数Pic是可以的?当执行Pic时,这些参数的值从何而来?

您的函数Pic接受两个参数,Show接受一个参数。您使用单个参数调用Show,该参数是一个函数;该函数具有两个参数。当您将一个函数传递给另一个函数时,假设您调用的函数Show将调用您在Pic中传递的函数,并在调用时提供必要的参数。

您的函数Pic接受两个参数,Show接受一个参数。您使用单个参数调用Show,该参数是一个函数;该函数具有两个参数。当您将一个函数传递给另一个函数时,假设您正在调用的函数Show将调用您在Pic中传递的函数,并在调用时提供必要的参数。

当您说Pic40时,30调用函数Pic,它将返回函数定义中所示的[][]uint8。这意味着您在注释掉的代码中传递了一个要显示的[][]uint8

当您说ShowPic时,您将Pic作为参数传递,这是一个函数。这正是该剧所期待的。Pic类型为funcdx,dy int[][]uint8

Go允许您将函数作为参数传递,这就是这里发生的情况。

当您说Pic40,30时,您调用函数Pic,它返回一个[][]uint8,如函数定义中所示。这意味着您在注释掉的代码中传递了一个要显示的[][]uint8

当您说ShowPic时,您将Pic作为参数传递,这是一个函数。这正是该剧所期待的。Pic类型为funcdx,dy int[][]uint8


Go允许您将函数作为参数传递,这就是这里发生的事情。

您对Show的定义非常正确-它是一个接受另一种特定格式概念作为参数的函数。 Pic就是这样一个符合这个标准的函数——所以你通过它来成功地显示


但是当你调用Pic30,40时,这意味着不是一个函数,而是用这些参数调用函数的结果。因此,在本例中,您传递的不是函数Pic,而是它返回的切片[][]uint8。当然,我们不能接受

关于Show的定义,您是完全正确的——它是一个接受另一种特定格式概念作为参数的函数。 Pic就是这样一个符合这个标准的函数——所以你通过它来成功地显示


但是当你调用Pic30,40时,这意味着不是一个函数,而是用这些参数调用函数的结果。因此,在本例中,您传递的不是函数Pic,而是它返回的切片[][]uint8。当然,我们不能接受

单击godoc.org上的标题,查看实现所记录内容的代码。Pic调用您传递给显示的函数。单击godoc.org上的标题,查看实现所记录内容的代码。Pic调用您传递给显示的函数。好的。但是dx和dy的值来自哪里呢?如何将自己的宽度和高度发送到此函数?Show的实现将调用您在内部提供的函数。你在这个例子中写的是Pic,它返回一张图片作为灰度值的2D数组。Show现在提供此图像生成器以显示其结果。Show将调用Pic,或者您传递给它的任何其他图像生成器函数,它知道如何显示Pic生成的灰色图像。名字就这样出现了,我现在知道了。这将在本教程的后面部分解释:我认为在练习中不使用模板是明智的,因为在这一点之前,模板是无法解释的。但是dx和dy的值来自哪里呢?如何将自己的宽度和高度发送到此函数?Show的实现将调用您提供的函数
它是内部的。你在这个例子中写的是Pic,它返回一张图片作为灰度值的2D数组。Show现在提供此图像生成器以显示其结果。Show将调用Pic,或者您传递给它的任何其他图像生成器函数,它知道如何显示Pic生成的灰色图像。名字就这样出现了,我现在知道了。这将在本教程的后面部分解释:我认为在练习中不使用模板是明智的,因为在这一点之前,模板是无法解释的。