我正在阅读一些教程,但我无法理解表达式是什么.任何人都可以向我解释这个代码以及为什么/什么时候应该使用它?
// Method call with "method expression" syntax
func main() {
dog := Dog{}
b := (*Dog).Bark // method expression
b(&dog, 5)
}
type Dog struct {}
// Methods have a receiver, and can also have a pointer
func (d *Dog) Bark(n int) {
for i := 0; i < n; i++ {
fmt.Println("Bark");
}
}
Run Code Online (Sandbox Code Playgroud)
甲方法表达是一种可被称为像一个普通的功能,不同之处在于还通过作为第一个参数作用于目标函数.这是因为它需要知道要使用哪个对象.
通常,您只需使用以下内容:
d := &Dog{}
d.Bark(5)
Run Code Online (Sandbox Code Playgroud)
但是使用方法表达式,您可以"保存"该函数,允许您将其传递给其他东西.例如,您可以选择使用(*Dog).Bark或(*Dog).Sit作为操作,并从帮助程序中调用它.例如:
func main() {
var b func(*Dog, int)
if (shouldBark) {
b = (*Dog).Bark
} else {
b = (*Dog).Sit
}
d := Dog{}
DoAction(b, &d, 3)
}
func DoAction(f func(*Dog, int), d *Dog, n int) {
f(d, n)
}
Run Code Online (Sandbox Code Playgroud)
具体语法(*Dog).Bark意味着您正在为具有指针接收器的方法派生函数.
老实说,这些并不经常使用.我建议你先掌握一下语言(例如:参加整个围棋之旅),然后再考虑较少使用的功能.
| 归档时间: |
|
| 查看次数: |
324 次 |
| 最近记录: |