go - 将方法转换为 func var
问题描述
为什么将方法分配给函数处理程序有效。
短链接:https : //play.golang.org/p/UEYGCpMgyV6
package main
import (
"fmt"
"math"
)
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func Abs() float64 {
return math.Sqrt(10)
}
func AbsFloat(f float64) float64 {
return math.Sqrt(f)
}
func main() {
v := Vertex{3, 4}
// Assigning Abs() to func handler.
var absFunc func() float64 = Abs
fmt.Println(absFunc())
// Wrong type as expected.
//absFunc = AbsFloat
// Assigning method to func handler works, why ?
absFunc = v.Abs
// Changing receiver args. Useful for unittesting but why/how this works ?
v.X = 1
v.Y = 1
fmt.Println(absFunc())
}
func()float64 == func(T)float64 或其他东西是 Golang 类型检查“功能”吗?请帮助理解这个概念。
解决方案
推荐阅读
- php - all() 函数 Laravel 中的每个都没有数据
- azure - 发生 AZURE SQL 插入时如何触发逻辑应用
- javascript - 如何将数组中的项目数组解析为浮点/整数
- java - 有什么方法可以在 IntelliJ 中获得类似 Eclipse 的自动完成功能?
- xamarin.forms - ReadOnlyObservableCollection 显示重复值
- python - 为什么管道被用作 GridsearchCV 的一部分而不是相反?
- python - 在 Cygwin 中重用 PyCharm Python 虚拟环境?
- c# - 通用搜索 Acumatica 不适用于 Windows 服务器上的点符号
- python - 如何使用 statsmodels 线性模型 OLS 找到预测变量的平方和?
- c# - 使用 SVG 并能够单击并突出显示该部分?