【问题标题】:Golang Function Call Without Parentheses不带括号的 Golang 函数调用
【发布时间】:2018-11-15 06:36:58
【问题描述】:

我正在浏览他们网站上的 Golang 教程,并且对类似于我在此处简化和复制的代码感到困惑:

package main

import (
    "fmt"
    "math"
)

func main() {
    a := math.Sqrt2
    fmt.Println(a)
}

这会在沙盒中打印1.4142135623730951。用a := math.Sqrt(2) 替换a := math.Sqrt2 做同样的事情,但我很困惑如何在没有括号的情况下调用该函数。 math.Sqrt 不是这里的函数指针(无论如何都没有 math.Sqrt2 函数,它是一个不带任何括号传递的函数。Go 文档中的函数 here 被列为:func Sqrt(x float64) float64 即带有参数。所以它是如何工作的?仅仅是因为math.Sqrt() 是一个简单的函数,Go 可以假设它是一个 float64 而不传递括号?我错过了什么吗?

如果有帮助,我最初在第 14 行的教程中发现了这种现象here。如果有人可以向我解释这个功能,那就太棒了。我很想了解它。

【问题讨论】:

标签: function go


【解决方案1】:

这里没有什么特别的事情发生。 math.Sqrt2 是一个常数。您可以在docsmath 包中找到其他常量。

一般来说,围棋并没有任何“魔法”。因此,如果某事感觉有点神奇,那很可能只是误会。

【讨论】:

  • 知道了!我想多了!非常感谢!
  • "go 并没有任何“魔法”" --- 除非它有:表达式的行为可能会根据上下文而有所不同。例如:作为复合表达式的一部分与作为return 的一部分(多值返回)。对我来说 - 这完全是反直觉的魔法
猜你喜欢
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多