package main
import "fmt"
type a int
func (a) A() {
fmt.Println("a")
}
func main() {
var method = interface{ A() }.A
var aa a = 1
method(aa)
}
其中 method 的类型是 func(interface{A()})
暂时不清楚这个操作的意义在哪
1
lloovve 2022 年 7 月 16 日 via iPhone
类似函数指针,很多地方用
|
2
Mark24 2022 年 7 月 16 日
Golang 不懂。
动态语言里面,可以“裁剪”方法。 以动态性很高的 Ruby 为例:可以通过 method 获得任意对象方法的指针。 方法本质上就是可以被复用的逻辑。如果方法可以被“裁剪” 就可以在需要他的地方使用。非常灵活。 |
3
BeautifulSoap 2022 年 7 月 16 日 via Android
|
4
pastor 2022 年 7 月 17 日
看样子像是:类方法如果不是通过对象实例调用,则首个参数作为对象实例,其他一些语言有类似的
|
5
lysS 2022 年 7 月 27 日
type S struct{}
func (s S) A(x int) {} func main() { var method = (S{}).A method(1) } 还有这样呢 |
6
kkeep 2022 年 7 月 30 日
不是,你这能编译通过么?
interface { A() } 这里面 A 是哪来的 |
7
kkeep 2022 年 7 月 30 日
我的,有意思,是临时定义了一个 interface
var IA interface { A() } var ai IA var method = ai.A |
8
kkeep 2022 年 7 月 30 日
(有一说一,第一次见这种用法, 有点意思 https://go.dev/play/p/Qrabk1b7WI3
|
9
voidmnwzp 2022 年 8 月 22 日 via iPhone
interface.a 相当于
func (impl interface{A()}){ impl.A()} |